トップ回答者
Application_Endの原因について

質問
-
IIS7.5+.Net framerwork4.0(C#)で、WebServiceを作成しています。
アプリケーションプールの設定では以下の通りの設定でアプリケーションを動作させています。
---
プロセスモデル
-アイドル状態のタイムアウト(分):0
リサイクル
-定期的な間隔(分):0
----
稼働中、ほとんどの場合、そのままう動きぱなしなのですが、
希に、Global.Application_Endで一度停止(?)し、
その2~5分後に再度 Global.Application_Startが呼び出される
現象が発生します。
このとき、アプリケーションプールのプロセスはそのまま(processIDが同一)の場合と、
アプリケーションプールのプロセスIDが変化してアプリケーションが起動(Application_Start呼出)
される場合と2種類確認されています。
アプリケーション内の例外は全てcatchしているつもりなのですが、未ハンドリング例外発生以外で、、
Application_Endが呼び出される原因というのは何が考えられるのでしょうか?
また、このアプリケーション再起動(Application_End~Application_Start)の前後で
ワーカープロセスのプロセスIDが変化する場合、変化しない場合の原因などは何が考えられるのでしょうか?
よろしくお願いいたします。
- 移動 星 睦美 2014年6月2日 6:46 Internet Explorer から
2014年6月2日 4:25
回答
-
これは IIS のフォーラム (http://social.technet.microsoft.com/Forums/ja-JP/home?forum=iis7ja) の方が妥当かな、という印象ですが、フォーラムオペレーターの方が判断してくださると思うので、とりあえず横に置いておきます。
で、IIS におけるアプリケーションプールのリサイクルの原因とその記録方法が以下にまとめて公開されていますので、まずはそちらをご確認ください。
表記上 IIS7 となっていますが、IIS7.5 でも同様です。(適用対象に Windows Server 2008 R2 が含まれています)
http://technet.microsoft.com/ja-jp/library/cc753412(v=ws.10).aspxプロセス ID はリサイクルであれば基本的には変わるはずだったと記憶していますが、詳細はちょっと把握していません。
OS なり IIS なりの内部動作の都合と思われるので、公開情報は無いかもしれません。
クラッシュしたことによるプロセス起動だと、今まで使用していたプロセス ID が空いているので偶然同じになる、ということなのかもしれませんが、類推の域を出ません。
MCITP(Database Developer/Database Administrator)
- 編集済み nagino - 引退エンジニア 2014年6月2日 5:17
- 回答の候補に設定 佐伯玲 2014年6月3日 4:28
- 回答としてマーク 佐伯玲 2014年6月19日 4:54
2014年6月2日 5:11 -
> プロセスモデル
> -アイドル状態のタイムアウト(分):0
> リサイクル
> -定期的な間隔(分):0ゼロに設定している(長時間アイドルによるシャットダウンも、定期的なリサイクルも行わない設定にしている)にもかかわらず、ワーカープロセスがシャットダウン/再起動されることがあるが、その原因は何かということですか?
問題のあるアプリケーションによるメモリリーク等により、ワーカープロセスの正常性が保てず、結果予期しないシャットダウン/再起動が起こっているのだと思います。
何故ゼロに設定したのか分かりませんが、問題のあるアプリケージョンを全て修正できない限り、少なくともリサイクルの方は行うべきではないでしょうか。
2014年6月2日 6:26 -
アプリケーションの再起動には、ワーカープロセスの再起動と、アプリケーションドメインの再起動の2パターンあります。
アプリケーションドメインの再起動は、同一プロセス内でアプリケーションドメインが再起動するだけですので、プロセスIDは変わりません。
たとえば、Web.configを書き換えたとか、binフォルダ内を書き換えたとか、そういう場合はアプリケーションドメインのみの再起動だったような気がします。
ワーカープロセスの再起動の場合は、イベントログに関連情報が出ているかもしれません。
※アプリケーションドメインの場合は出たかどうだったかあまり覚えていませんが。
2014年6月2日 8:53 -
> このいずれの設定も0にしているのは
> ・24時間365日いつ呼び出されるか分からない
> ・システムの起動に2~3分掛かる
> ことから、このような設定にしている次第です。でも、予期しないシャットダウンは起こっているのですよね?
その頻度にもよるかもしれませんが、アクセスが最も少ない時間帯に計画的にリサイクルを行う方が、一番ビジーな時間帯に予期しないシャットダウンが突然起こるより良いのではないですか?
「システムの起動に2~3分掛かる」という件ですが、ASP.NET 4 / IIS 7.5 から以下のような機能が使用できるようになっているそうですので、これも合わせて検討されてはいかがですか?
IIS オート スタート設定による ASP.NET Web アプリケーションの初回実行時のパフォーマンス向上
http://blogs.msdn.com/b/chack/archive/2013/09/25/using-aspnet-iis-auto-start-on-windows-azure-cloud-services.aspx2014年6月3日 3:48
すべての返信
-
これは IIS のフォーラム (http://social.technet.microsoft.com/Forums/ja-JP/home?forum=iis7ja) の方が妥当かな、という印象ですが、フォーラムオペレーターの方が判断してくださると思うので、とりあえず横に置いておきます。
で、IIS におけるアプリケーションプールのリサイクルの原因とその記録方法が以下にまとめて公開されていますので、まずはそちらをご確認ください。
表記上 IIS7 となっていますが、IIS7.5 でも同様です。(適用対象に Windows Server 2008 R2 が含まれています)
http://technet.microsoft.com/ja-jp/library/cc753412(v=ws.10).aspxプロセス ID はリサイクルであれば基本的には変わるはずだったと記憶していますが、詳細はちょっと把握していません。
OS なり IIS なりの内部動作の都合と思われるので、公開情報は無いかもしれません。
クラッシュしたことによるプロセス起動だと、今まで使用していたプロセス ID が空いているので偶然同じになる、ということなのかもしれませんが、類推の域を出ません。
MCITP(Database Developer/Database Administrator)
- 編集済み nagino - 引退エンジニア 2014年6月2日 5:17
- 回答の候補に設定 佐伯玲 2014年6月3日 4:28
- 回答としてマーク 佐伯玲 2014年6月19日 4:54
2014年6月2日 5:11 -
フォーラム オペレーターの星 睦美です。
yosimatu さん、こんにちは。質問内容がInternet Explorer と関連がないようですので、IIS に関する話題を扱っているフォーラムにスレッドを移動させていただきました。
フォーラムで役立つ回答がありましたら、投稿者から[回答としてマーク] をお願いします。
フォーラム オペレーター 星 睦美 - MSDN Community Support
- 編集済み 星 睦美 2014年6月2日 6:47 移動のお知らせ
2014年6月2日 5:23 -
> プロセスモデル
> -アイドル状態のタイムアウト(分):0
> リサイクル
> -定期的な間隔(分):0ゼロに設定している(長時間アイドルによるシャットダウンも、定期的なリサイクルも行わない設定にしている)にもかかわらず、ワーカープロセスがシャットダウン/再起動されることがあるが、その原因は何かということですか?
問題のあるアプリケーションによるメモリリーク等により、ワーカープロセスの正常性が保てず、結果予期しないシャットダウン/再起動が起こっているのだと思います。
何故ゼロに設定したのか分かりませんが、問題のあるアプリケージョンを全て修正できない限り、少なくともリサイクルの方は行うべきではないでしょうか。
2014年6月2日 6:26 -
アプリケーションの再起動には、ワーカープロセスの再起動と、アプリケーションドメインの再起動の2パターンあります。
アプリケーションドメインの再起動は、同一プロセス内でアプリケーションドメインが再起動するだけですので、プロセスIDは変わりません。
たとえば、Web.configを書き換えたとか、binフォルダ内を書き換えたとか、そういう場合はアプリケーションドメインのみの再起動だったような気がします。
ワーカープロセスの再起動の場合は、イベントログに関連情報が出ているかもしれません。
※アプリケーションドメインの場合は出たかどうだったかあまり覚えていませんが。
2014年6月2日 8:53 -
> プロセスモデル
> -アイドル状態のタイムアウト(分):0
> リサイクル
> -定期的な間隔(分):0ゼロに設定している(長時間アイドルによるシャットダウンも、定期的なリサイクルも行わない設定にしている)にもかかわらず、ワーカープロセスがシャットダウン/再起動されることがあるが、その原因は何かということですか?
問題のあるアプリケーションによるメモリリーク等により、ワーカープロセスの正常性が保てず、結果予期しないシャットダウン/再起動が起こっているのだと思います。
何故ゼロに設定したのか分かりませんが、問題のあるアプリケージョンを全て修正できない限り、少なくともリサイクルの方は行うべきではないでしょうか。
SurferOnWwwさん
”ワーカープロセスがシャットダウン/再起動されることがあるが、その原因は何かということですか?”
まさにその通りです。
このいずれの設定も0にしているのは
・24時間365日いつ呼び出されるか分からない
・システムの起動に2~3分掛かる
ことから、このような設定にしている次第です。
が、内部的にやむを得ずシャットダウン/再起動が必要な状況になっていることが問題なのですね。
リサイクルの件だけでもできるように検討したいと思います。
ありがとうございます。
2014年6月2日 9:36 -
> このいずれの設定も0にしているのは
> ・24時間365日いつ呼び出されるか分からない
> ・システムの起動に2~3分掛かる
> ことから、このような設定にしている次第です。でも、予期しないシャットダウンは起こっているのですよね?
その頻度にもよるかもしれませんが、アクセスが最も少ない時間帯に計画的にリサイクルを行う方が、一番ビジーな時間帯に予期しないシャットダウンが突然起こるより良いのではないですか?
「システムの起動に2~3分掛かる」という件ですが、ASP.NET 4 / IIS 7.5 から以下のような機能が使用できるようになっているそうですので、これも合わせて検討されてはいかがですか?
IIS オート スタート設定による ASP.NET Web アプリケーションの初回実行時のパフォーマンス向上
http://blogs.msdn.com/b/chack/archive/2013/09/25/using-aspnet-iis-auto-start-on-windows-azure-cloud-services.aspx2014年6月3日 3:48 -
SurferOnWww さん
返事が遅れて申し訳ありません。
「IIS オート スタート設定による ASP.NET Web アプリケーションの初回実行時のパフォーマンス向上」の件、検討してみようと思います。
有り難うございます。
2014年6月12日 5:38