Когда приложение перестаёт реагировать, важно быстро определить, где оно застопорилось: в I/O, системном вызове, блокировке или в логике приложения.
Состояние процесса (R, S, D, Z, T):
ps -o pid,ppid,state,cmd -p <PID>
Ключевые состояния:
D — ожидание I/O
T — остановлен
Z — зомби
Kernel stack зависшего процесса (если он залип в системном вызове):sudo cat /proc/<PID>/stack
Признаки I/O-зависания:
io_schedule, wait_on_page_bit.Открытые файлы, сокеты, дескрипторы:
sudo lsof -p <PID>
Python: быстрый
traceback без перезапуска:sudo py-spy dump --pid <PID>
Node.js: корректный способ получить диагностический отчёт: запуск:
node --report-on-signal --report-compact app.js
Получение отчёта:
kill -USR2 <PID>
Системные вызовы, на которых процесс висит:
sudo strace -p <PID>
Частые паттерны ожидания:
futex(...), read(...), poll(...), select(...).Профиль нагрузки процесса (
CPU, context switch, I/O):pidstat -p <PID> -w -d 1
🔥 Эти команды позволяют быстро и без даунтайма понять, завис ли процесс в
I/O, блокировке, системных вызовах или в логике приложения.➡️ DevOps Ready | #практика