web-dev-qa-db-ja.com

どのプロセスが高いCPU使用率を引き起こしているのかを知るにはどうすればよいですか?

Solaris仮想マシンで奇妙な問題が発生しています。起動して1〜2時間起動すると、CPU使用率が5秒間で最大100%になり、さらに5秒間は通常に戻り、そのように繰り返されます。再起動するまで-Solaris仮想マシンが完全に使用できなくなります。

5秒間の100%CPU使用率の繰り返し中に何が起こっているのかを知りたいのですが、システムは5秒間完全に応答しません。マウス/キーボードの割り込みも処理されないため、topまたはprstat

だから私は知りたい:

  • 100%のCPU使用率を引き起こしたプロセスID
  • 100%のCPU使用率の間にプロセスが何をしていたか

あなたの提案を提供してください、ありがとう!

2
Howard

Topをバッチモードで実行してみることができます。

top -b -n100 > top.log

ここで、-n100は100回の反復を表します。

もう1つの方法は、適切な引数を指定してpsを使用することです(これらはLinuxからのものであり、Solarisのpsのマニュアルページを参照する必要がある場合があります)。便宜上、コマンドはBashスクリプトに埋め込まれています。

   #!/bin/bash 
   while true ; do
      ps -eo pcpu,pmem,pid,ppid,args >> process.log
      sleep 1
   done

Niceコマンドを使用して、プロセスアクティビティログプロセスの優先度をリアルタイムに変更する必要がある場合もあります。

5
jpe

特に仮想化環境で実行している場合は、原因がプロセスであると直接想定しないでください。

これは、ハイパーバイザーの問題またはカーネル関連の問題である可能性もあります。

Dtraceを使用して、これらのCPU使用率が高い期間にカーネルが何をしているかを把握します。

DTraceToolkit cputimes および modcalls.d コマンドは良いスタートです。

ホストOSもSolarisの場合、dtraceはCPU負荷の発生元を特定するのにも役立ちます。

3
jlliagre