
重複の可能性:
「kill -9」が動作しない場合はどうなりますか?
これを尋ねるには少し遅れましたが、後で参考にできるようにします。
今日、顧客はSSH接続が遅く、コマンドの実行速度が遅いと報告した後(一部はまったく機能しない)、サーバーを確認するように求められました。
ログイン後すぐに入力できるため、待ち時間や帯域幅飽和などのネットワーク上の問題ではないようです(これはSSHの経験に直接関連する傾向があるためです)。最初に実行しようとしましたが、top
何も起こらなかった後、Ctrl + Cを押して操作をキャンセルしました。プロンプトが開始待機中に中断されましたtop
。
free -m
また、キャンセルする前にプロンプトで1分以上停止しました。
df -h
それは実行され、60%の空きディスク容量があることを示しました(一部のアプリケーションがクラッシュしてディスクにログがいっぱいになったかどうか疑問に思います)。
dmesg
実行されません。
実行しましたが、tail -n 50 /var/log/message
残念ながらもう出力が出ないのに深刻な問題があるようです。多くのメモリ位置は16進数で印刷されており、おそらくその内容(理解できない裏打ち)が右側に表示されているでしょう。の出力に非常に似ています。これ同様の例を見つけようとしてログを検索しました。右側の列にほとんどの行に "ext4"が含まれていることを除いて、ファイルシステムエラーがある可能性がありますか?
実行中にtail -n 50 /var/log/syslog
上に書かれた効果と一緒にすべてのメモリブームの真ん中にここで繰り返される数行のコードを見ましたInfo procname:pid blocked for more than 120 seconds
。
ps aux
あるプロセスのCPU使用率が299%に達するまで実行し、出力を見ました。
ps aux | grep procname
procuser 8279 299 0.0 479064 41916 pts/6 Sl+ 08:05 548:31 /path/to/procname procbox 6390 6394 6395 0
したがって、プロセスは奇妙に見えますが、メモリ関連のコマンド(sudoを使用するかどうかにかかわらず)を実行することはできません。たとえばfree -m
、またはtop
。cat /proc/meminfo
40GBのRAMのうち、5GBほど利用可能であることがわかります。
試してみましたが、kill PID
数分間ぶら下げてあきらめました。やり直してkill -9 PID
も同じことでした。プロセスが忙しくてカーネルの終了メッセージに応答できないと仮定できますか?試してみましたが、それも機能せずにrenice 19 PID
実行され、ただ停止します。kill -9 PID
renice
結局、ハード再起動が必要でしたが、これは理想的ではありませんでした。これで、サーバーのプロフェッショナルなアプリケーションによってファイルが破損しています。他にどのようなオプションがありますか?
単にプロセスを停止する方法はありますか? SIGTERMを送信するのではなく、コード処理を停止するなどの操作を実行しますか?
答え1
tail -n 50 /var/log/message を実行しましたが、残念ながらもはや出力がありませんが、何か真剣に間違っているようです。多くのメモリ位置は16進数で印刷されており、おそらくその内容(理解できない裏打ち)が右側に表示されているでしょう。
ほとんどすべてが可能であり、これらのコアダンプの内容はそれが何であるかを理解するために重要です。
たとえば、ディスクが要求に応答しなくなるなどのハードウェアの問題が発生する可能性があります。 RAMにすでにキャッシュされているプログラムを実行しようとすると問題なく動作しますが、ディスクから読み取る必要があるプログラムを実行すると中断される可能性があります。
また、カーネルのバグ、その他のドライバの問題、RAMの誤ったビット反転、またはその他の不良ハードウェアがある可能性があります。ドライバがカーネルの特定のリソースをロックした後にバグやエラーが発生し、正しくロックを解除できない場合、ロックを取得しようとしている他のドライバまたはシステムコールが中断されます。
これはおそらくカーネルのバグではないでしょう。たとえば、lvmまたはdmsetupツールを使用してディスクを管理すると、この現象が発生する可能性があります。どちらもデバイスをサスペンドする可能性があり、その結果、「デバイスがサスペンドされている限り、デバイスへの追加I / Oが延期されます。」これにより、デバイスにアクセスしようとするプログラムがカーネルからブロックされます。 「dmsetupの一時停止」を使用して手動でトリガーできます。または、LVMツールでエラーが発生したときにディスクが一時停止していることを予期せず見ました。
これが一回限りなら心配しないでください。このようなことが再度発生した場合は、原因を見つけるためにカーネル出力を注意深く記録してください。最初のクラッシュダンプが最も重要です。これが頻繁に発生し、出力が得られない場合は、次を使用することをお勧めします。ネットワークコンソールカーネル出力を別のシステムに直接送信します。
答え2
プロセスを停止するkill
のがまさにそのことです。kill -9 PID
処理するのに十分なリソースが確保されるまで実行して待つのが正解だと思います。
プロセスがメモリを占有していると思われる場合は、OOM Killerを手動で呼び出すこともできます。
echo f > /proc/sysrq-trigger