Где я могу увидеть список уничтоженных ядром процессов?

33

Есть ли какой-нибудь способ проверить, какой из моих процессов убил ядро? Иногда я захожу на свой сервер и обнаруживаю, что что-то, что должно было работать всю ночь, просто остановилось на 8 часов, и я не уверен, что это приложения или ядра.

Кит Сунде
источник

Ответы:

30

Если ядро ​​уничтожило процесс (потому что системе не хватило памяти), появится сообщение журнала ядра. Регистрация /var/log/kern.log(в Debian / Ubuntu другие дистрибутивы могут отправлять журналы ядра в другой файл, но обычно /var/logпод Linux).

Обратите внимание, что если сработал OOM-killer (убийца нехватки памяти), это означает, что у вас недостаточно виртуальной памяти. Добавьте больше подкачки (или, возможно, больше оперативной памяти).

Некоторые сбои процессов также записываются в журналах ядра (например, ошибки сегментации).

Если процессы были запущены из cron, у вас должно быть письмо с сообщениями об ошибках. Если процессы были запущены из оболочки в терминале, проверьте ошибки в этом терминале. Запустите процесс, screenчтобы снова увидеть терминал утром. Это может не помочь, если сработает OOM-killer, потому что он мог убить также cron или screen screen; но если вы столкнулись с OOM-killer, эту проблему вам нужно решить.

Жиль "ТАК - перестань быть злым"
источник
Как выглядит сообщение об уничтожении темы /var/log/kern.log?
Пчела
12

Процесс учета может помочь здесь.

Вкратце:

apt-get install acct

Затем попробуйте такие команды, как:

lastcomm
sa

или в Ubuntu:

lastcomm -f /var/log/account/pacct
sa /var/log/account/pacct

Видеть:

ОБНОВИТЬ

Как ни странно, pacctфайл содержит информацию о состоянии выхода, но, похоже, lastcommни saпечатает его.

Итак, насколько я вижу, вам нужно написать свою собственную программу на C для доступа к информации.

ОБНОВЛЕНИЕ 2

Вот версия, которая печатает код выхода.

Последние два поля - это «S» для сигнала и «E» для выхода, за которым следует номер сигнала или состояние выхода.

Так что в вашем случае вы, вероятно, ищете «S 15», означающее, что он получил SIGTERM.

sleep                X mikel    stdin      0.00 secs Fri Mar 25 20:15 S  15

По сравнению с «E 0», что означает, что процесс завершился без ошибки.

true                   mikel    stdin      0.00 secs Fri Mar 25 20:16 E   0

Только минимально проверено.

Mikel
источник
-1

sudo service --status-all

Эта команда расскажет вам, какие службы запущены в данный момент, а какие не запущены или не остановлены.


источник