Неожиданная остановка процесса (Linux)
1. Проверить логи ядра (dmesg
и /var/log/kern.log
)
Часто ОС убивает процессы из-за нехватки памяти, ошибок сегментации или нарушений политик безопасности.
Если процесс был убит из-за OOM (Out of Memory), в логах будет что-то вроде:
2. Проверить системные логи (/var/log/syslog
, journalctl
)
3. Проверить, был ли процесс убит OOM Killer
4. Проверить ограничения (ulimit
, cgroups, systemd)
ulimit
(лимиты процесса):ulimit -a # текущие лимитыcgroups
(контроль групп ресурсов):systemd-cgtop # мониторинг cgroupssystemd
(если процесс управляется через сервис):journalctl -u имя_сервиса systemctl status имя_сервиса
5. Проверить сигналы, которые получал процесс
Если процесс завершается не из-за OOM, а по другому сигналу (например, SIGSEGV
, SIGKILL
, SIGTERM
), можно использовать strace
для отладки:
6. Проверить, не убивает ли процесс родительский процесс или мониторинг (supervisor, systemd, cron)
pstree
— посмотреть иерархию процессов.auditd
— если подозреваете, что процесс убивает что-то внешнее.
7. Проверить использование памяти и CPU
8. Проверить SELinux / AppArmor (если включены)
Выводы
Если процесс убит OOM Killer → увеличить память, оптимизировать приложение, настроить
vm.overcommit_memory
.Если процесс падает с
SIGSEGV
→ отладка (gdb
,strace
).Если процесс убит вручную (
SIGTERM
,SIGKILL
) → искать, кто его завершает (auditd
,ps aux
,systemd
).Если проблема в ограничениях (
ulimit
,cgroups
) → увеличить лимиты.