👁 Когда процесс «завис», большинство сразу лезет в strace или начинает гадать по логам. Проблема в том, что strace может быть тяжёлым и вмешиваться в работу процесса. В Linux есть более быстрый способ понять, где именно залип процесс — посмотреть его стек прямо из ядра через /proc.
📝 Просмотр стека ядра зависшего процесса
Каждый процесс в Linux имеет файл /proc/PID/stack, который показывает, в каком месте ядра он сейчас находится.
sudo cat /proc/12345/stack
📌 В выводе будут функции ядра, например futex_wait, do_sys_poll, pipe_read — это сразу даёт понимание, что происходит: процесс ждёт лок, завис на IO или блокируется на сокете.
📝 Быстрая диагностика типа зависания
По стеку можно быстро определить причину зависания без тяжёлых инструментов.
sudo cat /proc/12345/stack | head -n 5
📌 Если видишь futex_wait — поток ждёт мьютекс, do_epoll_wait — залип в ожидании событий, io_schedule — проблема с диском. Это позволяет сразу сузить область поиска.
📝 Комбинация с wchan для быстрой проверки
Для ещё более быстрой диагностики можно посмотреть текущее состояние ожидания процесса через wchan.
ps -o pid,comm,wchan -p 12345
📌 wchan покажет, в какой функции ядра сейчас «спит» процесс, что удобно для массового анализа без чтения полного стека.
❗️ Это один из самых быстрых способов понять, почему процесс завис, без strace, без перезапуска и без влияния на прод. Если сервис «встал», /proc/$PID/stack часто даёт ответ за секунды.
tags: #linux #мониторинг #полезно



