LinuxのCPU使用率とプロセス実行履歴


38

どのプロセスがCPU使用率を最も高くしたかを確認する方法はありますか?

CPU使用率が100%に達するAMAZON EC2 Linuxがあり、システムを再起動します。SSH経由でもログインできません(puttyを使用)。

このような高いCPU使用率の原因と、それを引き起こしたプロセスを確認する方法はありますか?

私が知っているsartop、コマンドが、私は、プロセスの実行履歴のどこを見つけることができませんでした。Amazon EC2モニタリングツールの画像を次に示しますが、どのプロセスがそれを引き起こしたかを知りたいと思います。

ここに画像の説明を入力してください

私も試してみましたps -eo pcpu,args | sort -k 1 -r | head -100が、そのような高いCPU使用率を見つけることはできませんでした。

回答:


34

これを行うには、いくつかの方法があります。1つだけでなく、これを引き起こす暴走シナリオで多くのプロセスが完全に可能であることに注意してください。

最初の方法は、pidstatをセットアップしてバックグラウンドで実行し、データを生成することです。

pidstat -u 600 >/var/log/pidstats.log & disown $!

これにより、10分間隔でのシステムの実行の非常に詳細な見通しが得られます。これは、最も価値のある/信頼性の高いデータを生成するため、これが最初の呼び出しポートであることをお勧めします。

これには問題があります。主に、ボックスが暴走CPUループに入って巨大な負荷を生成する場合です。実際のプロセスがロード中にタイムリーに実行されるとは限らないため(実際に出力が失われる場合) !

これを探す2番目の方法は、プロセスアカウンティングを有効にすることです。おそらくより長期的なオプションです。

accton on

これにより、プロセスアカウンティングが有効になります(まだ追加されていない場合)。前に実行されていなかった場合、これには実行する時間が必要です。

実行されてから、たとえば24時間-このようなコマンドを実行できます(このような出力が生成されます)

# sa --percentages --separate-times
     108  100.00%       7.84re  100.00%       0.00u  100.00%       0.00s  100.00%         0avio     19803k
       2    1.85%       0.00re    0.05%       0.00u   75.00%       0.00s    0.00%         0avio     29328k   troff
       2    1.85%       0.37re    4.73%       0.00u   25.00%       0.00s   44.44%         0avio     29632k   man
       7    6.48%       0.00re    0.01%       0.00u    0.00%       0.00s   44.44%         0avio     28400k   ps
       4    3.70%       0.00re    0.02%       0.00u    0.00%       0.00s   11.11%         0avio      9753k   ***other*
      26   24.07%       0.08re    1.01%       0.00u    0.00%       0.00s    0.00%         0avio      1130k   sa
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28544k   ksmtuned*
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28096k   awk
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     29623k   man*
       7    6.48%       7.00re   89.26%       0.00u    0.00%       0.00s    

列は次のように順序付けられます。

  1. 呼び出し回数
  2. 通話の割合
  3. このタイプのすべてのプロセスに費やされた実時間。
  4. 割合。
  5. ユーザーCPU時間
  6. 割合
  7. システムCPU時間。
  8. 平均IO呼び出し。
  9. 割合
  10. コマンド名

探しているのは、ユーザー/システムCPU時間を最も多く生成するプロセスタイプです。

これにより、CPU時間の合計量(一番上の行)としてデータが分割され、そのCPU時間がどのように分割されたかがわかります。プロセスアカウンティングは、プロセスの起動時にオンになった場合にのみ適切にアカウンティングされるため、おそらくすべてのサービスが確実にアカウンティングされるように有効にした後、システムを再起動するのが最善です。

これは、実際にどのプロセスがこの問題の原因であるかについて明確なアイデアを実際に提供するわけではありませんが、良い感じを与えるかもしれません。24時間のスナップショットになる可能性があるため、結果が歪む可能性がありますので注意してください。また、カーネル機能であり、pidstatとは異なり、高負荷時にも常に出力を生成するため、常にログに記録する必要があります。

使用可能な最後のオプションもプロセスアカウンティングを使用しているため、上記のように有効にできますが、プログラム「lastcomm」を使用して、問題の前後に実行されるプロセスの統計と各プロセスのCPU統計を生成します。

lastcomm | grep "May  8 22:[01234]"
kworker/1:0       F    root     __         0.00 secs Tue May  8 22:20
sleep                  root     __         0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                   X root     pts/0      0.00 secs Tue May  8 22:49
ksmtuned          F    root     __         0.00 secs Tue May  8 22:49
awk                    root     __         0.00 secs Tue May  8 22:49

これにより、問題の原因についてのヒントが得られる場合があります。


非常に素晴らしく、詳細な答え、良い仕事です!
バート・デ・ヴォス

2
MIFE、あなたはそれを試してみた上で使用していません!pidstatと同じ情報を収集しますが、インタラクティブな探索にはるかに適したインターフェイスで表示します。また、sarスタイルのレポートを希望する場合は、toparコマンドもあります。
sciurus

18

Atopは、プロセスレベルへのドリルダウンを確認するのに特に便利なデーモンであり、デフォルトでこのデータを28日間アーカイブします。素晴らしいリアルタイム監視インターフェースを提供することに加えて、それらのログファイルを指定して、それらを開いてステップスルーすることができます。

この記事では機能についていくつかの考えを示していますが、詳細についてはマンページを参照してください

それは本当に素晴らしいソフトウェアです。


3

以下のようなプログラムpsmonMONITあなたのために多分役立ちます。システムで実行中のプロセスを監視し、しきい値(CPU使用率、メモリ使用率など)を超えた場合、何が起きているかについての電子メールレポートを送信するように設定できます。

また、不正なプロセスを自動的に再起動することもできます。


0

1つの解決策は、1分間のcronまたはスリープループで実行されるスクリプトを記述し、関連する出力(dmesg、pstree -paおよびps aux、おそらくvmstat)特定の制限を超える負荷平均を見つけた瞬間...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.