NSClient ++を実行しているWindows 2008R2サーバーがあります。なんらかの理由で、サービスはひねりを加えてNagiosのポーリングに応答しなくなりました。
サービスを再起動しようとすると、サービスマネージャーがサービスを強制終了するのに長い時間がかかり、最終的に「サービスの応答に時間がかかりすぎた」というメッセージが表示されます。しかし...それはまたサービスの新しいインスタンスを開始します。
タスクマネージャーまたはtasklist
を見ると、nsclient++.exe
の2つのインスタンスが実行されていることがわかります。
私はこれらの両方を使って殺そうとしました:
タスクマネージャーで右クリックして[プロセスの終了]-プロセスを強制終了するふりをし、エラー(たとえば、アクセス拒否)を報告しませんが、プロセスはまだそこにあります。
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
インスタンスがアンロードされたままになっていることがわかります。
余談ですが、新しいインスタンスを開始してそれを取得できることを期待して、これらのゾンビ(?)プロセスのすべてのTCP接続(TCPViewを使用)を終了することも試みました次に、物事が静かなときにサーバーを再起動できますが、それでもうまくいきませんでした。
すでにこれを理解しているようですが、問題はプロセスがカーネルで何かを待っていることです。 (これは通常、ドライバーレベルの問題ですが、常にそうであるとは限りません。)このようなプロセスを強制終了する唯一の方法は、カーネルをアンロードすることです。もちろん、再起動しないと実行できません。
特定の原因または競合を絞り込むことを期待して、いくつかのカーネルデバッグ( このツールは2008 R2で動作します ?)を試す価値があるかもしれませんが、問題を処理するためのオプションは、問題に対処するか、サーバーを再起動して削除します。
一緒に暮らすことを考えなかった理由はありますか?それがゾンビプロセスであり、何も影響を与えていない場合は、メンテナンスウィンドウまたはより都合のよい時間までリブートを延期できると思います。通常、私のアプローチは、ゾンビまたはハングしたプロセスが何も妨げていない場合-次のパッチサイクルまたは定期メンテナンス期間中に処理します。