问题描述
如何将 CPU 负载记录到文件中以便调查问题?
最佳办法
这非常有效:
while true; do uptime >> uptime.log; sleep 1; done
-
这将每秒记录您的 cpu 负载并将其附加到文件
uptime.log
中。\n然后您可以将此文件导入到 Gnumeric 或 OpenOffice 电子表格中以创建漂亮的图表(导入时选择“用空格分隔”)。
正如斯凯恩注意到的那样,这不足以诊断问题。因此,另外,运行这个(或使用他对这部分的答案):
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
-
这将每五秒将前 10 个最消耗 CPU 的进程附加到文件
ps.log
。\n请注意,这不是top
将为您提供的完整 boat-load 信息。这只是前 10 个,以及它们的 CPU 使用率、内存使用率和第一个参数(即它们的命令没有进一步的参数,如/usr/bin/firefox
中)
使用电子表格创建图表来查看 CPU 负载何时达到峰值后,您可以搜索此文件以查找最近的时间,以了解是什么进程导致了这种情况。
这些文件如下所示:
正常运行时间日志
~$ 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
...
日志记录
%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
命令,然后将其转储到文件中。
启动电脑时,打开终端,运行
top -b > ~/cpu.txt
然后,当您的电脑死机时,只需打开(可能很大)文本文件并检查最后一个条目,了解崩溃之前正在运行的内容的一些详细信息。事实上,该文件太大了,您最好运行 tail -250 ~/cpu.txt
。
另外,请检查 /var/log/kern.log,以防您的问题与硬件相关(如果这仅在升级后发生,则不太可能,但仍然值得检查)。
第三种办法
我发现 a great answer 由 Christopher 到 this question on Unix and Linux 使用 top
:
top -n 1 -b > top.out
这将为您提供 top
的 1 次迭代,然后停止,然后将其推送到文件中。