我正在尝试诊断 Linux 服务器上内存使用量偶尔出现的峰值。如果峰值足够高,OOM Killer 就会启动,导致 /var/log/messages 包含当时进程列表的有用转储。
但是,我也遇到了峰值,虽然严重程度不足以导致 OOM Killer 启动,但仍足以导致大量交换使用。有没有办法在这样的时期自动记录进程表?
答案1
您可以使用微电子实用程序来收集有关我们系统内存使用情况的信息,并将其收集起来以供以后分析。我曾用它来找出哪些进程正在使用交换空间,方法是先对系统交换空间使用情况进行快照,然后再拍摄其他快照并进行比较。
答案2
监控工具(例如nagios
或)ganglia
可以收集系统指标并构建图表。更简单的解决方案是使用一行代码并将其置于无限循环中,cron
等等...
free |awk '/Swap:/ {if(int($3/$2*100) > 50)system("echo Swap usage is over 50% && top -abn 1 > process_dump_`date +%Y-%m-%d_%H:%M`.txt")}'