アプリケーションプールを停止しても、アプリケーションのファイルが解放されない - IIS

アプリケーションプールを停止しても、アプリケーションのファイルが解放されない現象を紹介します。

概要

アプリケーションプールを停止しても、アプリケーションのファイルハンドルが解放されず、Webアプリケーションの更新やメンテナンスができません。
負荷の低いサーバーでは発生する頻度が低く、負荷の高いサーバーのほうが発生しやすいです。

現象の確認

[インターネット インフォメーション サービス (IIS) マネージャー]を起動します。アプリケーションのメンテナンスをするため、一時的にアプリケーションを停止したいです。
左側のツリービューで[アプリケーション プール]のノードをクリックして選択します。下図の画面が表示されます。


停止ししたいアプリケーションプールを中央のリストからクリックして選択し、右クリックします。ポップアップメニューが表示されますので [停止] の項目をクリックします。 または、右側の[操作]パネルの[停止]の項目をクリックしても停止できます。


表示上はアプリケーションプールが停止された状態になります。


Webアプリケーションのファイル操作をすると、以下のエラーが表示されます。

エラーメッセージ
プロセスはファイルにアクセスできません。別のプロセスが使用中です。

アプリケーションプールを停止しましたが、アプリケーションのファイルハンドルは解放されていないように見えます。

なお、アプリケーションプールを再開しようとすると、以下のエラーが発生します。



エラーメッセージ
アプリケーション プールを開始できません

この操作の実行中にエラーが発生しました。
詳細:
そのサービスは現在点でコントロール メッセージを受け付けることができません。(HRESULT からの例外: 0x80070425)
Error message
iis application pool to start
error:
The service can not accept control messages at this time. (Exception from HRESULT: 0x80070425)

原因

アプリケーションプールを停止してもアプリケーションに接続しているユーザーがいる場合、すぐには停止にならないと推測できます。

対処法1: しばらく待つ

しばらく待つとアプリケーションのファイルハンドルが解放される場合があります。

対処法2: 上位のサービスを順に停止する

Webサイト、IISサーバーの順に停止し、問題が解消されるか確認します。

インターネット インフォメーション サービス (IIS) マネージャーの左側のツリービューで対象のサイトのノードをクリックして選択します。 右クリックしてポップアップメニューを表示し、[Web サイトの管理]の[停止]の項目をクリックします。 または、右側の[操作]パネルの[停止]の項目をクリックします。


サイトが停止状態になりました。この状態でアプリケーションのファイルが解放されているか確認します。


改善されない場合は、サーバーを停止します。IISマネージャーの左側のツリービューでサーバーのノードをクリックして選択します。 右クリックしてポップアップメニューを表示し、[停止]の項目をクリックします。
または、右側の[操作]パネルの[停止]の項目をクリックしても停止できます。


IISサーバーが停止状態になりました。画面の見た目ではわかりにくいですが、[操作]パネルの[開始]の項目が有効になり、右クリック時のポップアップメニューでも [開始]の項目が有効になっています。
この状態でファイルが解放されているか確認します。IISのサーバーを停止した場合はほとんどの場合でファイルの開放がされます。



問題が解決されていれば、必要なメンテナンスを実施し、IISサーバーを開始し、その後、サイトを開始、最後にアプリケーションプールを開始して アプリケーションが実行される状態に戻します。

対処法3: 再起動する

上記の対処法でも解消しない場合、または、IISサーバーやアプリケーションプールが開始できない状態になってしまった場合には、マシンを再起動します。
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2022-02-21
作成日: 2021-09-06
iPentec all rights reserverd.