web-dev-qa-db-ja.com

Windows 2008R2でハングしたサービスを強制終了する方法

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インスタンスがアンロードされたままになっていることがわかります。

enter image description here

余談ですが、新しいインスタンスを開始してそれを取得できることを期待して、これらのゾンビ(?)プロセスのすべてのTCP接続(TCPViewを使用)を終了することも試みました次に、物事が静かなときにサーバーを再起動できますが、それでもうまくいきませんでした。

8
Kev

すでにこれを理解しているようですが、問題はプロセスがカーネルで何かを待っていることです。 (これは通常、ドライバーレベルの問題ですが、常にそうであるとは限りません。)このようなプロセスを強制終了する唯一の方法は、カーネルをアンロードすることです。もちろん、再起動しないと実行できません。

特定の原因または競合を絞り込むことを期待して、いくつかのカーネルデバッグ( このツールは2008 R2で動作します ?)を試す価値があるかもしれませんが、問題を処理するためのオプションは、問題に対処するか、サーバーを再起動して削除します。

一緒に暮らすことを考えなかった理由はありますか?それがゾンビプロセスであり、何も影響を与えていない場合は、メンテナンスウィンドウまたはより都合のよい時間までリブートを延期できると思います。通常、私のアプローチは、ゾンビまたはハングしたプロセスが何も妨げていない場合-次のパッチサイクルまたは定期メンテナンス期間中に処理します。

3
HopelessN00b