Назад | Перейти на главную страницу

Отладка внезапных пиков нагрузки

Мне нужно автоматически отлаживать внезапные пики нагрузки. Мы уже отслеживаем с помощью nagios, таких как проверочные скрипты, но пики нагрузки бывают редкими и короткими.

Я ищу демона, который проверяет загрузку каждые N секунд и при возникновении проблем сообщает что-то вроде ps aux --forest (и iotop --batch)

Графики, созданные, например, munin здесь не помогает, так как мне нужно определить процессы, вызывающие нагрузку.

Среди множества возможностей для локального мониторинга процесса (выберите свой яд) является контролировать, Я делаю что-то подобное в /etc/monit.d/system.conf на машинах centos;

check system localhost
    if loadavg (1min) > 6 then alert
    if loadavg (5min) > 6 then alert
    if memory usage > 90% then alert
    if cpu usage (user) > 90% then alert
    if cpu usage (system) > 75% then alert
    if cpu usage (wait) > 75% then alert

Я полагаю, что вы можете быть более агрессивными с проверками, поэтому вы можете настроить демон на более частое выполнение проверок, может быть, каждый 30 секунд пока вы не определите проблему и, следовательно, не воспользуетесь /etc/monit.conf что-то вроде этого;

set daemon  30
set mailserver localhost
#set alert user@gmail.com but not on { instance }
set alert user@gmail.com
include /etc/monit.d/*
set httpd port 2812
        allow 127.0.0.1

Если monit не предоставляет достаточно информации в почтовом предупреждении по умолчанию, вы можете настроить monit для выполнения пользовательских сценариев в таких условиях предупреждения;

check system localhost
    if loadavg (1min) > 6 then exec "/bin/bash -c '/usr/bin/top -n1 -b  | /bin/mail -s top-output userXXX@gmail.com'"
    if loadavg (5min) > 6 then exec "/bin/bash -c '/usr/bin/top -n1 -b  | /bin/mail -s top-output userXXX@gmail.com'"
    if cpu usage (user) > 90%  then exec "/bin/bash -c '/usr/bin/top -n1 -b  | /bin/mail -s top-output userXXX@gmail.com'"

(очевидно, зависит от настройки почтовой команды, но вместо этого вы можете использовать локальный корень и просто проверить его вручную)

perf это способ пойти, он обычно устанавливается по умолчанию (linux-tools в Debian).

Использовать perf top чтобы посмотреть на вашу проблему в интерактивном режиме, затем используйте perf stat -p PID уточнить по PID. Посмотрите вики, чтобы узнать больше: https://perf.wiki.kernel.org/index.php/Main_Page