Есть ли какой-нибудь способ проверить, какой из моих процессов убил ядро? Иногда я захожу на свой сервер и обнаруживаю, что что-то, что должно было работать всю ночь, просто остановилось на 8 часов, и я не уверен, что это приложения или ядра.
Если ядро уничтожило процесс (потому что системе не хватило памяти), появится сообщение журнала ядра. Регистрация /var/log/kern.log
(в Debian / Ubuntu другие дистрибутивы могут отправлять журналы ядра в другой файл, но обычно /var/log
под Linux).
Обратите внимание, что если сработал OOM-killer (убийца нехватки памяти), это означает, что у вас недостаточно виртуальной памяти. Добавьте больше подкачки (или, возможно, больше оперативной памяти).
Некоторые сбои процессов также записываются в журналах ядра (например, ошибки сегментации).
Если процессы были запущены из cron, у вас должно быть письмо с сообщениями об ошибках. Если процессы были запущены из оболочки в терминале, проверьте ошибки в этом терминале. Запустите процесс, screen
чтобы снова увидеть терминал утром. Это может не помочь, если сработает OOM-killer, потому что он мог убить также cron или screen screen; но если вы столкнулись с OOM-killer, эту проблему вам нужно решить.
/var/log/kern.log
?Процесс учета может помочь здесь.
Вкратце:
Затем попробуйте такие команды, как:
или в Ubuntu:
Видеть:
ОБНОВИТЬ
Как ни странно,
pacct
файл содержит информацию о состоянии выхода, но, похоже,lastcomm
ниsa
печатает его.Итак, насколько я вижу, вам нужно написать свою собственную программу на C для доступа к информации.
ОБНОВЛЕНИЕ 2
Вот версия, которая печатает код выхода.
Последние два поля - это «S» для сигнала и «E» для выхода, за которым следует номер сигнала или состояние выхода.
Так что в вашем случае вы, вероятно, ищете «S 15», означающее, что он получил SIGTERM.
По сравнению с «E 0», что означает, что процесс завершился без ошибки.
Только минимально проверено.
источник
Эта команда расскажет вам, какие службы запущены в данный момент, а какие не запущены или не остановлены.
источник