我正在尝试诊断Linux服务器上的内存使用量偶尔出现的高峰。 如果峰值足够高,OOM Killer就会启动,这会导致/ var / log / messages中包含当前进程列表的有用转储。
不过,我也遇到了尖峰,不足以导致OOM杀手踢,但仍足以导致大量的交换使用。 有没有办法在这样的时期自动logging进程表?
您可以使用smem实用程序来收集有关系统内存使用情况的信息,并将其收集起来以供日后分析。 我已经使用它来了解哪些进程正在使用交换,通过快照一次系统交换使用情况,然后再拍摄其他快照并进行比较。
像纳吉奥斯或ganglia这样的工具可以收集系统指标并build立图表。 更简单的解决scheme是使用一个class轮,把它放在无限循环, 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")}'