Короткий ответ
Сначала находят процесс через top/htop или ps aux --sort=-%cpu/-%mem, проверяют его роль (сервис, дочерний воркер, однократная задача) командами ps -o ppid,cmd и systemctl status, затем останавливают максимально безопасным способом: через штатный механизм сервиса (systemctl restart) или SIGTERM с ожиданием, а не сразу SIGKILL.
Как это работает подробнее
Высокое потребление CPU или памяти может быть симптомом, а не причиной: например, утечка памяти в коде приложения, бесконечный цикл из-за некорректных входных данных, либо нормальная, но временная фоновая задача (переиндексация, компакция); разница принципиальна, потому что в первом случае процесс нужно останавливать и чинить код, а во втором — дождаться завершения или перенести на менее загрученное время.
Пример кода
commands.sh
ps aux --sort=-%cpu | head -5
ps -o ppid,cmd -p 4321
systemctl status myapp.service
systemctl restart myapp.serviceЧто использовать на практике
- Практика. перед остановкой стоит снять диагностические данные (jstack/py-spy/perf top в зависимости от рантайма, либо хотя бы strace -p для короткого среза системных вызовов) — это может быть единственным шансом понять первопричину, если проблема не воспроизводится по требованию; также стоит проверить, не является ли процесс частью кластера, где внезапная остановка вызовет ребаланс или потерю кворума.
Подводные камни
- Риск. Частая ошибка — сразу выполнять kill -9 на процессе с высоким CPU без выяснения, является ли он частью управляемого кластера (например, узел базы данных), что может спровоцировать cascading failure у зависимых сервисов.