仮想サーバーが応答を停止し、CPUを100%使用しています。診断方法は何ですか?

仮想サーバーが応答を停止し、CPUを100%使用しています。診断方法は何ですか?

CentOS 7.4仮想サーバー(VMware ESXi)では、サーバーの使用量が数秒以内に突然100%に達し、SSHが機能せず、実行中の特定のプログラムが応答しなくなる奇妙な問題が発生しています。唯一の解決策は、vSphereを介してサーバーを強制的に再起動することです。これらの高い使用量の原因を特定することはできません。したがって、私の質問は、このように突然の高い使用量をどのように診断しますか?再起動後に調査するためにいくつかのプロセス情報を記録する方法はありますか?

編集:sshまったく機能しません。実際に私がやりましたが、ssh -vvv詳細な出力が「ホストポート22に接続中」で停止し、シェルは決して返されません。接続が確立されるのを待っているようです。については、ping当社のITエンジニアがサーバーへのICMPトラフィックをブロックしているため、ping動作を確認できません。

ベストアンサー1

同様の問題が発生したときに、次のような小さなスクリプトを作成しました(CPUとRAMの使用量とともに、毎秒実行されているプロセスの日付とリストを記録します)。

#!/bin/sh
while true
  do 
    date
    ps faux
    sleep 1
  done >> /a/log/file

バックグラウンドプログラムとして実行しています。これは、プロセスがいつどこで中断されるかを理解するのに役立ちます。

/var/log/messagesその後、問題を正確に識別するために、別のログ(おそらくクレイジープログラムのログ)を調べる必要があります。
インストールすることもできます。atsarIO、ネットワークアクティビティ、CPUなどの統計ログを含む素晴らしいバイナリログを提供します。

/!\ Warning:
このスクリプトを十分に長時間実行すると、ログが大幅に大きくなる可能性があります。十分なディスク容量がある場所にログファイルを保存します。それ以外の場合は大きな問題になる可能性があります。

/!\ Warning 2:
esxi設定が何であるかわかりません。ただし、何らかの理由でディスクが esxi 全体で遅延している場合、仮想マシンが IO に依存する場合、これにより重大な遅延が発生し、CPU 使用率が高くなる可能性があります。

編集2:

@sourcejediが述べたように、スクリプトに同期を追加することで、ハードリブート時にログが記録されるようにすることができます(必要なものはわかりませんが、最も安全な2つが1つより優れています)。

#!/bin/sh
    LOGFILE="a/log/file"
    echo "" > $LOGFILE
    while true
      do 
        date
        ps faux
        sync $LOGFILE
        sleep 1
      done >> $LOGFILE

おすすめ記事