![调试突然的负载峰值](https://linux22.com/image/585022/%E8%B0%83%E8%AF%95%E7%AA%81%E7%84%B6%E7%9A%84%E8%B4%9F%E8%BD%BD%E5%B3%B0%E5%80%BC.png)
我需要自动调试突发负载峰值。我们已经使用 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