web-dev-qa-db-ja.com

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

ほとんどのCPU使用率を引き起こしたプロセスを確認する方法はありますか?

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

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

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

enter image description here

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

39
pmoubed

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

最初の方法は、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

これにより、何が問題を引き起こしているのかについてのヒントも得られる場合があります。

34
Matthew Ife

Atop は、プロセスレベルへのドリルダウンを調べるのに特に便利なデーモンであり、デフォルトでこのデータを28日間アーカイブします。優れたリアルタイムモニタリングインターフェースを提供するだけでなく、それらのログファイルを指定して開き、それらをステップ実行できます。

article は機能のアイデアを提供します。詳細は manpage で確認できます。

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

18
Jeff Ferland

psmonmonit などのプログラムが役立つかもしれません。これらは、システムで実行されているプロセスを監視でき、しきい値(CPU使用率、メモリ使用率...)を超えた場合、何が起こっているかについて電子メールレポートを送信するように設定できます。

正常に動作しないプロセスを自動的に再起動することもできます。

3

1つの解決策は、1分のcronまたはスリープループで実行されるスクリプトを記述し、電子メール/ scpジョブ/ダンプをebsボリュームに送信することです...関連する出力(dmesg、pstree -paおよびps aux、おそらく) vmstat)特定の制限を超える負荷平均を見つけた瞬間...

0
rackandboneman