アプリケーション/アプリプールの再起動がトリガーされたときに、アプリケーションができるだけ早くオンラインに戻るようにするにはどうすればよいですか?
さらに良いことに、通常のトリガーが発生したときにアプリケーションが再起動しないようにする方法はありますか?web.config、global.asax、またはmachine.configを変更するのが好きですか?
アプリケーション/アプリプールの再起動がトリガーされたときに、アプリケーションができるだけ早くオンラインに戻るようにするにはどうすればよいですか?
さらに良いことに、通常のトリガーが発生したときにアプリケーションが再起動しないようにする方法はありますか?web.config、global.asax、またはmachine.configを変更するのが好きですか?
ASP.NET 4.0には「自動起動」機能があります(Scott Guthrieがそれについて話します)が、今は役に立ちません。
Webサイト/アプリケーションが実行されているアプリケーションプールが自動的に「スリープ」しないことを確認してください。デフォルトのAppPoolは、20分間非アクティブになるとシャットダウンするように設定されています。私が覚えているように、これはウェブサイトを再構築しませんが、最初のリクエストを著しく遅くします。
ちなみに、Webサイトプロジェクトもビルドできるため、App_Codeは空になり、binフォルダーには多数の.dllが含まれます([ビルド]> [Webサイトのビルド]を使用するだけです)。これは間違いなくあなたのサイトへの最初のリクエストをより速くします。ウェブサイトアプリケーションがプリコンパイルされたウェブサイトプロジェクトよりも早く起動するとは思いませんが、管理は簡単です。
はい、ウェブアプリに移行すると、再起動プロセスが高速化されます。もう1つのことは、global.asaxを可能な限りクリーンにすることです。
Webアプリを使用している場合でも、これらの構成ファイルのいずれかが変更された場合、またはbinディレクトリ内のアセンブリが変更された場合、サイトは再起動します。これを止めることはできません。
再起動時間は約2〜3秒とかなり速いはずです。ただし、最大20秒かかるドメインレベルのデータを設定する非常に複雑なglobal.asaxファイルを見てきました。もちろん、通常のページの読み込み時間が3秒から0.1秒に短縮されたため、彼らはその価格を喜んで支払いました。
主にWebサイトプロジェクトを使用しているため、すべてのコードファイルが.dllにプリコンパイルされているため、Webアプリケーションプロジェクトに切り替えるとこれが高速化されると思います。
Webサイトのプロジェクトを使用する場合、 App_Codeファイルを外部のクラスライブラリに移動すると、コードがプリコンパイルされるため、処理が高速化されると思います。
Webアプリケーションプロジェクトの場合、Web展開プロジェクト(VS2010ダウンロードリンク)を使用して、Webサイトプロジェクトと同様にサイトをDLLにプリコンパイルできます。WDPの使用方法については、ScottGuの記事を参照してください。
毎秒300以上のリクエストを受け取る非常にトラフィックの多いサイトを実行しているという点で同様の問題があります。再起動には、少なくとも90秒かかります。
サーバーを再起動する変更を加えると、すべての古い要求(非常に長時間実行されているものもあります)が閉じるまで再起動が停止しているように見えます。古いw3wp.exeインスタンスを手動で強制終了することで、再起動をより速く行うことができます。
IISにすべての接続をすぐに閉じて、ハードリスタートを実行させる方法はありますか?これを制御するためのIISまたはasp.netの設定はありますか?