如何记录CPU负载?

如何将CPU负载记录到文件以调查问题?

这非常有效:

while true; do uptime >> uptime.log; sleep 1; done 
  • 这将每秒记录您的CPU加载并将其附加到文件uptime.log

    然后,您可以将此文件导入Gnumeric或OpenOffice电子表格以创建一个漂亮的图形(在导入时选择“由空格分隔”)。

正如Scaine所注意到的,这还不足以诊断问题。 所以,另外,运行这个(或者使用他对这部分的回答):

 while true; do (echo "%CPU %MEM ARGS $(date)" && ps -e -o pcpu,pmem,args --sort=pcpu | cut -d" " -f1-5 | tail) >> ps.log; sleep 5; done 
  • 这将每隔五秒将十大CPU ps.log进程追加到文件ps.log

    请注意,这不是最重要的信息。 这只是前十名,只是他们的CPU使用率,内存使用率和第一个参数(即没有进一步参数的命令,如/usr/bin/firefox

在使用电子表格创建图表以查看CPU负载何时通过屋顶之后,您可以在此文件中搜索最近的时间以查看导致它的进程。

这就是这些文件的样子:

uptime.log

 ~$ cat uptime.log 22:57:42 up 1 day, 4:38, 4 users, load average: 1.00, 1.26, 1.21 22:57:43 up 1 day, 4:38, 4 users, load average: 0.92, 1.24, 1.21 22:57:44 up 1 day, 4:38, 4 users, load average: 0.92, 1.24, 1.21 22:57:45 up 1 day, 4:38, 4 users, load average: 0.92, 1.24, 1.21 ... 

ps.log

 %CPU %MEM ARGS Mo 17. Jan 23:09:47 CET 2011 0.7 0.9 /usr/bin/compiz 0.8 0.5 /usr/lib/gnome-panel/clock-applet 1.1 1.7 /opt/google/chrome/chrome 1.2 0.3 /usr/bin/pulseaudio 1.8 4.0 /opt/google/chrome/chrome 2.6 1.5 /opt/google/chrome/chrome 2.6 3.2 /usr/bin/google-chrome 3.6 2.6 /opt/google/chrome/chrome 4.9 1.5 /usr/bin/X 5.7 1.6 /opt/google/chrome/chrome %CPU %MEM ARGS Mo 17. Jan 23:09:48 CET 2011 0.7 0.9 /usr/bin/compiz 0.8 0.5 /usr/lib/gnome-panel/clock-applet 1.0 1.7 /opt/google/chrome/chrome 1.2 0.3 /usr/bin/pulseaudio 1.8 4.0 /opt/google/chrome/chrome 2.6 1.5 /opt/google/chrome/chrome 2.6 3.2 /usr/bin/google-chrome 3.6 2.6 /opt/google/chrome/chrome 4.9 1.5 /usr/bin/X 5.7 1.6 /opt/google/chrome/chrome ... 

您可以使用-b选项以批处理方式运行top命令,然后将其转储到文件中。

启动PC时,打开终端,运行

top -b > ~/cpu.txt

然后当你的PC冻结时,只需打开(可能是巨大的)文本文件,并检查最后一个条目,了解崩溃前运行的内容的一些细节。 事实上,文件将是如此愚蠢,你最好运行tail -250 ~/cpu.txt

还要检查你的/var/log/kern.log,以防你的问题与硬件有关(如果这只是在升级之后才会发生,但值得检查)。