ほとんどのCPU使用率を引き起こしたプロセスを確認する方法はありますか?
CPU使用率が100%に達するAmazon EC2 Linuxがあり、システムを再起動する必要があります。 SSH(PuTTYを使用)でもログインできません。
このような高いCPU使用率の原因と、それを引き起こしたプロセスを確認する方法はありますか?
sar
およびtop
コマンドについては知っていますが、プロセス実行履歴をどこにも見つけることができませんでした。これはAmazon EC2モニタリングツールからの画像ですが、どのプロセスがそれを引き起こしたのか知りたいのです。
私も試しましたps -eo pcpu,args | sort -k 1 -r | head -100
しかし、そのような高いCPU使用率を見つけることはできません。
これを行うには、いくつかの方法があります。暴走シナリオの多くのプロセスが完全に可能であることに注意してください。
最初の方法は、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
列は次のように並べられます。
探しているのは、ユーザー/システムの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
これにより、何が問題を引き起こしているのかについてのヒントも得られる場合があります。
1つの解決策は、1分のcronまたはスリープループで実行されるスクリプトを記述し、電子メール/ scpジョブ/ダンプをebsボリュームに送信することです...関連する出力(dmesg、pstree -paおよびps aux、おそらく) vmstat)特定の制限を超える負荷平均を見つけた瞬間...