如何记录 CPU 负载?

如何记录 CPU 负载?

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

答案1

效果很好:

 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
  • ps.log这会每五秒将最耗 CPU 的 10 个进程附加到一个文件中。

    请注意,这并不是完整的信息top。这只是前 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
 ...

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
 ...

答案2

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

启动电脑时,打开终端,运行

top -b > ~/cpu.txt

然后,当您的 PC 死机时,只需打开(可能很大的)文本文件并检查最后一项,了解崩溃前正在运行的内容的详细信息。事实上,该文件会非常大,您最好运行tail -250 ~/cpu.txt

另外,请检查您的 /var/log/kern.log,以防您的问题与硬件有关(如果这种情况仅在升级后发生,则不太可能,但仍然值得检查)。

答案3

我发现很好的答案经过克里斯托弗关于Unix和Linux的这个问题使用top

top -n 1 -b > top.out

这将为您提供 1 次迭代top然后停止,然后将其推送到文件中。

答案4

我有一个用于获取进程负载的脚本,其中包含旋转日志:

#!/bin/bash 
MaxFileSize=204800
DaysToKeep=7
echo -e "\n Fecha:"`date` >> /var/log/ps.log
echo -e "\n Uptime: "`uptime` >> /var/log/ps.log
ps -e -o pcpu,pmem,args --sort=pcpu | tail >> /var/log/ps.log
#Get size in bytes** 
file_size=`du -b /var/log/ps.log | tr -s '\t' ' ' | cut -d' ' -f1`
if [ $file_size -gt $MaxFileSize ];then   
    timestamp=`date +%s`
    mv /var/log/ps.log /var/log/ps.log.$timestamp
    gzip /var/log/ps.log.$timestamp
    touch /var/log/ps.log
    # remove old files
    find /var/log -name "ps.log.*" -type f -mtime +$DaysToKeep -delete 
fi

我的原始来源可以浏览这里

相关内容