ps чаще всего оперируешь PID процесса или грепаешь вывод по строке в имени процесса:# ps -p 524 -o %mem,%cpu,cmd# ps ax | grep prometheusЗачастую удобнее сразу указать имя процесса. Покажу на примере просмотра потоков процесса, о которых дальше пойдёт речь:
# ps -T -C prometheus PID SPID TTY TIME CMD 525 525 ? 00:55:34 prometheus 525 803 ? 00:03:10 prometheus 525 808 ? 00:09:22 prometheus 525 1054 ? 00:08:44 prometheus 525 1113 ? 00:12:03 prometheus 525 1129 ? 00:10:42 prometheus 525 58983 ? 00:11:30 prometheusУвидели сразу PID процесса 525 и все его потоки с номерами SPID. Иногда бывает нужно посмотреть или сразу посчитать потоки во время отладки какого-то приложения, которое, к примеру, виснет по какой-то причине. Быстро считаем его потоки:
# ps -T -C zabbix_server | wc -l82Обращаю внимание, что вывод с потоками будет больше, чем просто вывод списка процессов, которые тоже часто считают для задач мониторинга. На том же сервере в тот же момент:
# ps ax | grep zabbix_server | wc -l59Если есть какие-то проблемы с приложением, и не понятно, что именно тормозит, можно вывести нужные метрики с разбивкой на потоки. Это хорошо показать на примере Fail2ban с PID 508.
# ps -L -o spid,%mem,%cpu,cmd 508 SPID %MEM %CPU CMD 1070 0.6 0.0 /usr/bin/python3 /usr/bin/fail2ban-server -xf start 1071 0.6 0.1 /usr/bin/python3 /usr/bin/fail2ban-server -xf start 1072 0.6 0.0 /usr/bin/python3 /usr/bin/fail2ban-server -xf start 1074 0.6 0.1 /usr/bin/python3 /usr/bin/fail2ban-server -xf start 1075 0.6 0.0 /usr/bin/python3 /usr/bin/fail2ban-server -xf start 1077 0.6 0.3 /usr/bin/python3 /usr/bin/fail2ban-server -xf startУ Fail2ban может быть много фильтров, которые обрабатываются в разных потоках. И какой-то из них в случае лавинообразного разрастания лога может очень сильно нагружать систему. Зная PID и SPID можно посмотреть подробности потока:
# cat /proc/508/task/1077/stat1077 (f2b/f.wp-login) ...................................Всю строку не привожу, так как самое интересное в начале. Тут видно, что указанный поток обрабатывает jail с именем wp-login. Больше информации покажет
status:# cat /proc/508/task/1077/statusЕщё более подробную информацию можно получить через strace. Он не только по PID может подключаться, но и по SPID:
# strace -p 1077Там будет виден и лог, который поток читает, и даже конкретные строки. На нагруженном сервере завалит консоль, так что лучше сразу в файл выводить и потом смотреть. Обычное перенаправление в файл не сработает, надо использовать ключ
-o:# strace -p 1077 -o ~/strace.outМожно конкретизировать, что записывать. Например, для Fail2ban будут актуальны операции открытия файлов и чтения:
# strace -p 1077 -e trace=openat,readА для каких-то процессов будет иметь смысл следить за записью:
# strace -p 1077 -e trace=writeПодобная проверка с strace будет очень актуальна, когда у вас какой-то поток приложения, к примеру, обращается по сети к ресурсу, который недоступен. И запрос висит по таймауту хрен знает сколько времени. А у вас сам процесс из-за него тормозит или висит.
Трейсы в режиме реального времени можно посмотреть и в
htop. Выбираете нужный процесс или поток и нажимайте s. Если strace установлена в системе, то увидите её работу.Стандартные и относительно простые утилиты консоли Linux позволят продебажить и разобраться даже в сложных и неочевидных на первый взгляд ситуациях.
📌 Полезные ссылки по теме заметки дебага консольными утилитами:
▪️Примеры использования ps
▪️Анализ дисковой активности в Linux
▪️Узнаём, что конкретно тормозит в php коде
▪️Расследование фантомных чтений с диска
▪️Расследование тормозов php сайта с помощью perf
▪️Профилирование нагрузки в Linux
▪️Кто и как использует swap
▪️Анализируем нагрузку на диск с помощью perf-tools
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#linux #terminal #perfomance


