调试突然的负载峰值

调试突然的负载峰值

我需要自动调试突发负载峰值。我们已经使用 nagios 之类的检查脚本进行监控,但负载峰值很少且持续时间很短。

我搜索一个守护进程,它每 N 秒检查一次负载,如果有问题,则报告类似的内容ps aux --forest(和 iotop --batch)

例如使用 munin 创建的图表在这里没有帮助,因为我需要识别导致负载的进程。

答案1

在本地过程监控的众多可能性中(选择你的毒药) 是监控/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 [email protected] but not on { instance }
set alert [email protected]
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 [email protected]'"
    if loadavg (5min) > 6 then exec "/bin/bash -c '/usr/bin/top -n1 -b  | /bin/mail -s top-output [email protected]'"
    if cpu usage (user) > 90%  then exec "/bin/bash -c '/usr/bin/top -n1 -b  | /bin/mail -s top-output [email protected]'"

(显然依赖于设置的邮件命令,但您也可以使用本地根并手动检查)

答案2

perf是可行的方法,它通常是默认安装的(linux-tools在 Debian 上)。

使用perf top以交互方式查看您的问题,然后使用perf stat -p PID按 PID 进行细化。查看 wiki 以了解更多信息:https://perf.wiki.kernel.org/index.php/Main_Page

相关内容