Процесс намертво завис в проде? Ставим диагноз без kill -9
Добавлено: 05 сен 2026, 16:39
Если сервис перестал отвечать, рука сама тянется к kill -9. Но перезапуск вслепую не решает проблему — он уничтожает контекст, и сбой повторится. Показываю, как заглянуть внутрь зависшего приложения на лету и поставить точный диагноз, не останавливая процесс.
Базовая диагностика зависания
# 1. Находим PID проблемного процесса по имени.
Код: Выделить всё
pidof my_process# -t добавит таймстампы: видно, КОГДА процесс замер.
Код: Выделить всё
sudo strace -tt -p <PID> -e trace=read,writeРасширенный мониторинг дескрипторов
# 3. Отслеживаем ВСЕ файловые операции.
# ВАЖНО: не 'open', а группа %file — современный glibc зовёт openat(), а не open(),
# поэтому одиночный 'open' почти ничего не покажет. %file ловит open, openat, stat, access.
Код: Выделить всё
sudo strace -p <PID> -e trace=read,write,%fileКод: Выделить всё
sudo strace -p <PID> -e trace=%net
# 4. Если вывод strace замирает на строке вида:
# read(5,
# — процесс жив, но ждёт данных в дескриптор №5.
# Отключаемся (Ctrl+C НЕ убьёт процесс) и смотрим, что это за дескриптор:
Код: Выделить всё
sudo lsof -p <PID> -a -d 5Код: Выделить всё
sudo ls -l /proc/<PID>/fd/5
#Linux #Strace #Troubleshooting #DevOps #SysAdmin