[РЕШЕНО!] CentOS yum can't start new thread, MemoryError и прочие проблемы

archive view archive save

[РЕШЕНО!] CentOS yum can't start new thread, MemoryError и прочие проблемы В ходе обновления yum может выдавать ошибки "thread.error: can't start new thread" или "MemoryError", yum зависает, глючит и не работает.

Рецепты типа "yum --noplugins ..." использовать yum без плагинов, "rpm -qV yum" (не должно быть никакого результата) проверить не испорчен ли пакет yum, проверка конфигов на наличие нестандартных символов или опечаток - неканает.

[root@localhost ~]# yum update
Loaded plugins: fastestmirror, priorities, security, versionlock
Determining fastest mirrors
Traceback (most recent call last):
  File "/usr/bin/yum", line 29, in ?
    yummain.user_main(sys.argv[1:], exit_code=True)
  File "/usr/share/yum-cli/yummain.py", line 309, in user_main
    errcode = main(args)
  File "/usr/share/yum-cli/yummain.py", line 178, in main
    result, resultmsgs = base.doCommands()
  File "/usr/share/yum-cli/cli.py", line 345, in doCommands
    self._getTs(needTsRemove)
  File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 101, in _getTs
    self._getTsInfo(remove_only)
  File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 112, in _getTsIn
fo
    pkgSack = self.pkgSack
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 662, in 
    pkgSack = property(fget=lambda self: self._getSacks(),
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 502, in _getSack
s
    self.repos.populateSack(which=repos)
  File "/usr/lib/python2.4/site-packages/yum/repos.py", line 232, in populateSac
k
    self.doSetup()
  File "/usr/lib/python2.4/site-packages/yum/repos.py", line 79, in doSetup
    self.ayum.plugins.run('postreposetup')
  File "/usr/lib/python2.4/site-packages/yum/plugins.py", line 179, in run
    func(conduitcls(self, self.base, conf, **kwargs))
  File "/usr/lib/yum-plugins/fastestmirror.py", line 181, in postreposetup_hook
    all_urls = FastestMirror(all_urls).get_mirrorlist()
  File "/usr/lib/yum-plugins/fastestmirror.py", line 333, in get_mirrorlist
    self._poll_mirrors()
  File "/usr/lib/yum-plugins/fastestmirror.py", line 376, in _poll_mirrors
    pollThread.start()
  File "/usr/lib/python2.4/threading.py", line 416, in start
    _start_new_thread(self.__bootstrap, ())
thread.error: can't start new thread
 
---
 
[root@localhost ~]# yum --noplugins install ntp
Setting up Install Process
Traceback (most recent call last):
  File "/usr/bin/yum", line 29, in ?
  File "/usr/share/yum-cli/yummain.py", line 309, in user_main
  File "/usr/share/yum-cli/yummain.py", line 178, in main
  File "/usr/share/yum-cli/cli.py", line 349, in doCommands
  File "/usr/share/yum-cli/yumcommands.py", line 181, in doCommand
  File "/usr/share/yum-cli/cli.py", line 583, in installPkgs
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 2713, in install
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 675, in 
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 559, in _getUpda
tes
  File "/usr/lib/python2.4/site-packages/yum/packageSack.py", line 432, in simpl
ePkgList
  File "/usr/lib/python2.4/site-packages/yum/packageSack.py", line 482, in _comp
uteAggregateListResult
  File "/usr/lib/python2.4/site-packages/yum/packageSack.py", line 858, in simpl
ePkgList
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 1210, in retur
nPackages
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 44, in newFunc
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 1194, in _buil
dPkgObjList
MemoryError

Результат вывода top показал, что CentOS не хочет использовать swap (файл подкачки) даже при самых пиковых нагрузках на оперативную память, который при установке был создан размером в 256 МБ.

Swap: ... 0 used, но почему?;( А возможно потому, что размер swap-а (файла подкачки) был меньше, чем размер оперативной памяти * 2 (256*2=512) - хотя и не факт, возможно это глюк CentOS 5. В минимальные системные требования для CentOS 5 "128M CLI/512M GUI per logical CPU" мы уложились.

После добавления к файлу подкачки ещё одного куска размером в 256 МБ файл подкачки начал использоватся, а yum перестал выдавать "thread.error: can't start new thread" или "MemoryError". Если у Вас та же "байда" и по результатам вывода top "Swap: ... 0 used", а "Swap: ... total" не равен двум объемам оперативной памяти, тогда добавляем размера файлу подкачки:

[root@localhost ~]# pwd
/root
[root@localhost ~]# dd if=/dev/zero of=swap.file bs=1M count=256
256+0 records in
256+0 records out
268435456 bytes (268 MB) copied, 5.52518 seconds, 48.6 MB/s
[root@localhost ~]# mkswap swap.file
Setting up swapspace version 1, size = 268431 kB
[root@localhost ~]# swapon swap.file
[root@localhost ~]# vi /etc/rc.local
swapon /root/swap.file

Для автоматического подключения нашего дополнительного файла подкачки после каждой перезагрузки, нужно добавить "swapon /root/swap.file" в "/etc/rc.local"!

Ещё упомянутый выше глюки могут возникать из-за лимита на использование "virtual memory", ниже лимиты для CentOS 5 по умолчанию:

[root@localhost ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3938
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 3938
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Если у Вас значение лимита "virtual memory" не unlimited, тогда смените его командой "ulimit -v unlimited" и заодно "ulimit -m unlimited" для "max memory size".

В борьбе с зависанием yum иногда может помочь "rpm --createdb" пересборка БД пакетов /var/lib/rpm/Packages или такое заклинание:

yum clean all 
rm -f /var/lib/rpm/__db* 
rpm --rebuilddb 
yum update

Если возникла необходимость переустановить yum, то сначала находим xxxxx.rpm пакет, удаляем без зависимостей и устанавливаем снова:

rpm -e --nodeps --justdb yum
rpm -ivh xxxxx.rpm 
yum update

Есть проблемы с yum? Пишем в комментарии...


Комментарии в блоге
Новое на форуме