アプリケーションプールを停止しても、アプリケーションのファイルが解放されない
アプリケーションプールを停止しても、アプリケーションのファイルが解放されない現象を紹介します。
概要
アプリケーションプールを停止しても、アプリケーションのファイルハンドルが解放されず、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やデータベースの記事なども担当。