アプリプールのリサイクル後にasp.net mvc webappをウォームアップするにはどうすればよいですか?


23

IIS 8.0でASP.NET MVC webappを実行しています。リクエストを受け取る前に、アプリケーションをウォームアップする必要があります。新しいコードをデプロイするときに、アプリケーションを自動的にウォームアップするプロセスがすでにあります。ただし、アプリがウォームアップされない結果となる定期的なアプリプールリサイクルイベントが発生しています。

アプリプールのリサイクルイベントを検出し、スクリプトまたはコードを実行するためのベストプラクティスはありますか?

回答:


55

できることはいくつかあります。

1.アプリケーションの初期化

IIS 8.0に同梱されているアプリケーション初期化モジュールを使用できます

あなたはこのようなものを持つことができます web.config

<applicationInitialization
     doAppInitAfterRestart="true" >
   <add initializationPage="/" />
</applicationInitialization>

これによりinitializationPage="/"、アプリが自動的に起動するたびに、アプリのルート()にリクエストが送信されます。

また、アプリケーションプールの開始モードを構成することもできます。これにより、Always RunningIISが再起動するたびに、アプリケーションプールがすぐに開始されます(アプリケーションプールを右クリックしてから、Advanced Settings

ここに画像の説明を入力してください

そしてPreloadあなたのサイト自体のために(サイトを右クリックしてManage SiteからAdvanced Settings

ここに画像の説明を入力してください

2.アイドルタイムアウトを無効にする

さらにIdle Time-out、アプリケーションプールのin を0(無限)に変更することにより、idleTimeoutを無効にすることができます(デフォルトではIISは20分間のアクティビティ後にアプリをシャットダウンします)。

ここに画像の説明を入力してください

3.定期的なリサイクルを無効にする

またRegular Time Interval (minutes)、デフォルトでIISをオフにすると、29時間ごとにアプリがリサイクルされます。

ここに画像の説明を入力してください

ために


3
これらの設定の欠点に関するコメントをいただければ幸いです。確かにそれらがデフォルトではない理由があります。
user42134

2
確かに、すべてのサイトが常に生きているため、同じIISボックスで複数のサイトを実行すると、メモリ消費量が高くなり、サイト密度が非常に低くなります。また、アプリケーションのメモリリークに対する保護もありません。IISは、マネージ言語がWebで普及する前に存在し、多くのアプリがネイティブハンドラーを実行していたため、長時間実行し続けるとメモリリークや奇妙な状態に陥ることに留意してください。これは、アプリの問題のために深夜に起きてサーバーをリセットする必要があるシステム管理者を支援するために行われました。彼らはまだほとんどが後方比較上の理由からデフォルトです
ahmelsayed

1
IIS 7.5の代替案-Windows Server 2008 R2
キケネット

2
#1のIIS 7.5のアプリケーション初期化モジュールを機能させることができます。#2と#3は、IIS 7.5にそのまま適用されます
15

1
これを使用している人々の参考までに:にapplicationInitialization行く<configuration><system.webServer>
ポール

1

私の経験から、AlwaysRunningとPreloadが有効になっていると、速度はあまり上がりません。ほとんどの待機時間は、動的コンパイル(aspxプリコンパイルで修正可能)、およびメモリとキャッシュへのアセンブリの読み込みにかかります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.