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
その後、問題を正確に識別するために、別のログ(おそらくクレイジープログラムのログ)を調べる必要があります。
インストールすることもできます。atsar
IO、ネットワークアクティビティ、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