問題を調査するために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を最も多く消費する上位10のプロセスが5秒ごとにps.log
ファイルに追加されます。
これは、top
が提供する完全なボート情報ではないことに注意してください。これは、トップ10であり、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を確認してください(これはアップグレード後にのみ発生する可能性がありますが、それでも確認する価値があります)。