Как за 10 секунд найти «узкое место» в работе процесса на сервере (Linux)
Раз уж начал говорить про тормозные сайты и оптимизацию, то давайте немного углубимся в эту тему.
Если сервер начал тормозить, а вы не хотите копаться часами — вот два простых инструмента, которые сразу покажут, где проблема.
Когда сервер начинает «тупить», нет смысла смотреть PID всех процессов подряд. Проверять нужно только те, которые реально могут нагружать систему.
✅nginx стоит анализировать тогда, когда страницы начинают отвечать медленно, появляются 502/504 ошибки или воркеры оказываются забиты под завязку. Однако важно помнить: сам по себе nginx редко является причиной проблем — он чаще "пострадавший", а не виновник.
✅php-fpm или php нужно проверять, если сайт зависает, процессор загружен под 100%, страницы генерируются слишком долго или воркеры начинают "залипать".
✅mysql или mariadb становятся главным подозреваемым, когда запросы к базе данных выполняются медленно, появляются блокировки таблиц, а выборки занимают секунды вместо миллисекунд. Во многих случаях именно база — источник узкого места на сервере.
✅java, node или python-приложение следует анализировать, если само приложение активно потребляет CPU или память, особенно при росте нагрузки или очередей запросов.
✅redis или postgres нужно проверять тогда, когда задержки связаны с кэшем или базой данных: например, ключевые операции начинают выполняться медленно, или система зависает из-за блокировок.
Как посмотреть, какие процессы запущены?
Лично я чаще всего использую команду top — она показывает список процессов в реальном времени, автоматически обновляется каждые несколько секунд и сразу видно, кто именно нагружает процессор. Вы можете скачать из репозиториев htop — улучшенная версия top (удобнее, с цветами).
Чтобы узнать PID нужного сервиса, можно использовать команду pidof, например:
pidof nginx
Эта команда, к примеру, вернёт идентификатор процесса, если nginx запущен в системе.
Итак, начнем:
sudo perf stat -d -p $PID -- sleep 10
✅ Показывает, что процесс делает на CPU
✅ Определяет, есть ли проблемы с кешем
✅ Отлично помогает понять, «алгоритм тупит» или «железо не справляется
pidstat -wstu -p $PID 1
Команда pidstat показывает в реальном времени, что именно происходит внутри процесса:
• Загрузка CPU по каждому потоку — помогает понять, забито ли одно ядро или нагрузка распределена равномерно.
• Ожидания по I/O — если процесс «висит», это может быть не вычисление, а медленный диск или очередь на чтение/запись.
• Своп — если начала использоваться swap-память, значит оперативка закончилась, и система резко начинает тормозить.
• Блокировки потоков — бывает, что CPU почти не загружен, а программа всё равно «тормозит» — причина в том, что поток ждёт освобождения ресурса, а не считает.
📌 Когда использовать:
✅ Непонятно, почему nginx/php/java «грузит проц»
✅ Процесс «жрёт CPU», но запросы обрабатываются медленно
✅ Подозреваете I/O
✅ Нужно быстро сузить круг проблем, не подключая профайлеров
📌 Главное правило
-Nginx, сам по себе почти никогда не причина тормозов.
-MySQL — почти всегда.
-PHP — в 50% случаев.
Так что диагностировать всех сразу не надо — сначала ищем жрущий процесс через top, а потом именно его можно препарировать.