Короткий ответ
Сначала находят проблемный процесс и его потоки через top -H/htop, смотрят, что делает процесс на уровне системных вызовов через strace -p <pid>, или профилируют код через py-spy dump/py-spy top, которые показывают стек вызовов работающего процесса без его остановки.
Как это работает подробнее
top -H показывает загрузку CPU по отдельным потокам; strace трассирует системные вызовы, показывая, не крутится ли процесс в busy-loop без I/O (признак чистого CPU-bound цикла в коде). py-spy — внешний сэмплирующий профилировщик, читающий стек CPython-процесса из памяти.
Пример кода
Команды терминала
top -H -p <pid>
strace -f -p <pid> -c -T
py-spy dump --pid <pid>Что использовать на практике
- Рекомендация. если
straceне показывает системных вызовов продолжительное время — проблема скорее в самом коде (бесконечный цикл, неэффективный алгоритм, regex с катастрофическим backtracking);py-spy dump -p &lt;pid&gt;сразу укажет конкретную функцию.
Подводные камни
- Риск. пытаться подключить обычный debugger, требующий перезапуска процесса, к упавшему в 100% CPU production-процессу; смотреть только агрегированный CPU процесса без разбивки по потокам.