私の ASP.NET アプリは、iisreset またはアプリ ドメインのリサイクル後に最初のページ要求を読み込むのに時間がかかります。
アプリ ドメインのリサイクルにかかる時間を確実に測定する方法はありますか?
私の ASP.NET アプリは、iisreset またはアプリ ドメインのリサイクル後に最初のページ要求を読み込むのに時間がかかります。
アプリ ドメインのリサイクルにかかる時間を確実に測定する方法はありますか?
プロセスを監視し、CPU時間がゼロになるのを待つアプリを作成する以外に、ストップウォッチを使用して数回再起動する必要がある可能性があります。数秒のタイミングになると、ミリ秒はもう重要ではなくなります。したがって、ストップウォッチで十分です。
プロファイラーを使用して、さまざまな CPU サンプリング モードなどでボトルネックを測定してコードをナビゲートできます。そのようなツールは dotTrace です。:) http://www.jetbrains.com/profiler/
同様の問題がありましたが、私たちの経験が役立つかどうかはわかりません. 幸いなことに、これは私たちが最初にサービス指向アーキテクチャを調査していたときに起こったので、データを取得する他の方法と比較して、Web サービスがパフォーマンスにどのように影響するかに非常に関心がありました。
私たちの結果があなたに役立つと言っているのではありませんが、おそらく方法論.
実際には、さまざまな接続シナリオをテストするだけで、丸 8 時間の 2 日を費やしました。特に、バイナリ データではなく XML 経由でデータを取得することに関連する帯域幅の増加に関心がありました。XML データを取得するだけでパフォーマンスが低下することは完全に予想していましたが、これはネットワーク全体でより多くのバイト数になると想定していました。
それ自体が 10 ページのドキュメントだったので、結果については触れませんが、iSeries 上のデータにアクセスする .Net 言語で記述された Web サービスからデータを取得しているときに、興味深い遅延が発生したことを発見しました。 (AS/400、System i、または最近の新しい用語は何でも)。あなたが説明したように、データを取得するための最初の呼び出しには時間がかかりましたが、その後の呼び出しはより高速でした。
ネットワーク パケットを調べると、使用していた接続の種類 (Microsoft が提供する ODBC) が原因であることがわかりました。
クライアントと Web サービスの間、および Web サービスと iSeries (データ ストア) の間のネットワーク パケットを測定したところ、Web サービスが初めて iSeries に接続したときに遅延が発生していることがわかりました。パケットが送受信されていました。
簡単に言うと、Windows 側は接続要求を送信し、数ミリ秒待ってから別の要求を送信します。その間、iSeries の応答が遅かったため、接続の最初の試行で、Windows 側から iSeries 側に接続するための 4 つの呼び出しがあり、次に iSeries から 4 つの応答がありましたが、Windows 側では無視されました (接続の Windows 側が断念した)。最後に 4 ~ 6 回の試行の後、接続が確立されました。その後、接続はプールされたに違いありません。これは、短時間内の後続の接続が迅速だったためです。ただし、時間が経過すると (これが発生するまでにどれくらいの時間が必要かは特定できませんでした)、低速の初期接続が再び発生しました。
SO、その長い噴出の後、@Aggelos Mpimpoudis は、独自のコードをプロファイリングすることを提案しました。私の提案は、ネットワークパケットを分析するための経験とツールを持っている人を見つけて、プロセス全体を分析することです. そうすれば犯人を突き止めることができるかもしれません。
ちなみに、System.Data.Odbc ドライバーの代わりに Ibm.Data.Db2.iseries を使用して iSeries に接続するように切り替えた後、および iSeries への呼び出しの頻度がプールされた接続を開いたままにします。