Процессор застрял на 99% на несколько часов: выяснение логов


8

извлечь из syslog:

CRON[pid]: (user) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -
execdir fuser -s {} 2>/dev/null \; -delete)

Мой процессор завис на 99% в течение нескольких часов, и я предполагаю, что это из-за этого. Кто-нибудь знает, что это такое, как это началось и как это остановить?

РЕДАКТИРОВАТЬ: Я пытался, top -n1и я вижу это взамен несколько раз:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  
PID user      20   0     0    0    0 Z 99.9  0.0   0:00.00 fuser <defunct>

эта строка повторяется около 8 раз.

EDIT2:

uname-a:

user SMP Tue Feb 14 13:27:41 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux`
lsb_release -a:
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 11.10
Release:    11.10
Codename:   code

РЕДАКТИРОВАТЬ 3:

После перезагрузки система вернулась к тому же 99% cpu usageи тому же top -n1результату.


3
В этой команде есть ошибка. Вывод stderr для fuser отправляется в / dev / null, как и планировалось. Но таков вывод stderr команды find, чего, вероятно, не было. (Поскольку -execdir на самом деле не запускает команду через оболочку, поэтому 2> / dev / null обрабатывается оболочкой, напрямую вызываемой cron). Однако, хотя это может скрывать соответствующие симптомы, расположение 2> / dev / null не является причиной использования вашего процессора.
Джеймс Янгман

3
Это очень странно: процесс зомби не должен использовать процессорное время (у него даже нет кода для выполнения). У вас есть ошибка в инструментах отчетов о процессах или в вашем ядре. Что это за ОС (версия, ядро ​​и т. Д.)? Есть ли виртуализация? Каков выход uname -aи lsb_release -a?
Жиль "ТАК ... перестать быть злым"

1
Команда, fuserвероятно, очень недолгая. Он тратит свое время, тратя время ЦП (системное время, а не пользовательское), генерируя / proc данные, которые он (тривиально) потребляет. Каждый экземпляр, fuserвероятно, заканчивается очень быстро. Но, вероятно, он запускается много раз, поскольку, я полагаю, там много файлов сессий. Число 99,9%, вероятно, просто означает, что этот экземпляр fuserинтенсивно использовал процессор, прежде чем он умер. findвероятно, не очень агрессивен в отношении пожирания детей; Скорее всего, он будет вызываться waitpidснова только при выходе из каталога или при fuserповторном запуске .
Джеймс Янгман

uname-a: user SMP Tue Feb 14 13:27:41 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux lsb_release -a: Модули LSB недоступны. Идентификатор распространителя: Ubuntu Описание: Ubuntu 11.10 Релиз: 11.10 Кодовое имя: код
Джек,

К сожалению, исправление: -execdir ... \;ожидание должно быть немедленным, поскольку в качестве результата предиката необходим код возврата (я смешивал это с тем, -execdir ...+что всегда возвращает true, я думаю).
Джеймс Янгман

Ответы:


5

Это задание cron, которое очищает старые файлы сессий из / var / lib / php5 /. Если он завис на 99%, вам, возможно, следует проверить папку назначения (/ var / lib / php5 /) на предмет чрезмерного количества файлов или, возможно, даже повреждения файловой системы.

Процесс запускается из crontab. Смотрите списки crontab (описанные здесь ). Вы можете убить процесс и удалить его из crontab, но более вероятно, что у вас есть основная проблема, такая как чрезмерное количество файлов, которые необходимо исправить.


1
Если в конечном итоге запущено несколько процессов очистки, они могут мешать друг другу, создавая блокировки каталога при удалении файлов. Попробуйте временно удалить его из crontab до тех пор, пока загрузка не очистится. Затем добавьте его с большим интервалом между запусками. Возможно, вы захотите переместить его в сценарий с механизмом блокировки, чтобы обеспечить работу только одного экземпляра. Убейте все несколько экземпляров команды на данный момент.
BillThor

2

Нашел ответ здесь: http://www.flynsarmy.com/2011/11/fuser-using-100-cpu-in-ubuntu-11-10/

в /etc/cron.d/php5 on Ubuntu 11.10:

замещать
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] &amp;&amp; [ -d /var/lib/php5 ] &amp;&amp; find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2&gt;/dev/null \; -delete

С
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] &amp;&amp; [ -d /var/lib/php5 ] &amp;&amp; find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete


Это сработало, проблема, кажется, решена.
Джек
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.