NSClient++ を実行している Windows 2008R2 サーバーがあります。何らかの理由で、サービスがおかしくなり、Nagios ポーリングに応答しなくなりました。
サービスを再起動しようとしたとき、サービス マネージャーはサービスを強制終了するのに長い時間がかかり、最終的には「サービスの応答に時間がかかりすぎました」というメッセージが表示されて諦めます。しかし、サービスの新しいインスタンスも開始されます。
タスク マネージャーを見ると、実行tasklist
中のインスタンスが 2 つあることがわかります。nsclient++.exe
私は以下を使用してこれら両方を強制終了しようとしました:
タスク マネージャーで右クリックして [プロセスの終了] を実行すると、プロセスが強制終了されたように見え、エラーは報告されません (アクセス拒否など) が、プロセスはまだ存在します。
taskkill /PID <proc id> /F
- レポートは表示されSUCCESS: The process with PID 6672 has been terminated.
ますが、プロセスはまだ実行中です。SysInternals PsTools をダウンロードして実行しましたが、
pskill <PID>
レポートはProcess <PID> killed
まだプロセスが残っています。アカウントとしてこれを実行する
at hh:mm pskill <PID>
には実行します...そして、ご想像のとおり、プロセスはまだ実行中です。pskill
SYSTEM
上記のすべては管理者コマンドプロンプトで実行されました。
再起動は理想的ではありませんが (ボックスはかなりミッションクリティカルな実稼働サーバーです)、他に何を試すことができますか?
サーバーはリソース (メモリ、CPU、ディスクなど) に負担がかかっておらず、サーバー上で実行されているすべてのものは正常に動作しています。
SysInternals Process Explorer のスレッド タブをざっと見てみると、これらのnsclient++.exe
インスタンスはすべてアンロード中に停止していることがわかります。
余談ですが、新しいインスタンスを起動してポート 5666 を取得できることを期待して、これらのゾンビ (?) プロセスのすべての TCP 接続を (TCPView を使用して) 強制終了することも試みました。その後、状況が落ち着いたらサーバーを再起動できますが、残念ながらうまくいきませんでした。
答え1
すでにお分かりのようですが、問題はプロセスがカーネルで何かを待機していることです。(これは通常、ドライバー レベルの問題ですが、常にそうであるとは限りません。) このようなプロセスを強制終了する唯一の方法はカーネルをアンロードすることですが、もちろん、再起動せずにこれを行うことはできません。
カーネルデバッグを試してみる価値はあるかもしれない(このツールは2008 R2で動作しますか??) を実行して、特定の原因または競合を絞り込むことができますが、問題に対処するには、そのまま放置するか、サーバーを再起動して問題を解決するかのどちらかしか選択肢がありません。
そのまま放置することを考えなかった理由はありますか? ゾンビ プロセスで、何も影響を及ぼしていない場合は、メンテナンス ウィンドウまたはより適切なタイミングまで再起動を延期できると思います。通常、ゾンビ プロセスまたはハング プロセスが何も妨げていない場合は、次のパッチ サイクルまたはスケジュールされたメンテナンス ウィンドウ中に対処します。