web-dev-qa-db-ja.com

AcquireRequestStateの長い遅延

パフォーマンス監視ツール「New Relic」を使用していると、「AcquireRequestState」で時々(ただし多すぎる)長い遅延が発生します。私は10、20秒の遅れ、時には数分について話しています。

このイベント用に独自のイベントハンドラーを作成していないことは知っています。

これらの遅延の原因をどこで探し始めればよいですか?これまでにmsdnで見つけた小さな情報は役に立ちませんでした。

24
Greylander

私のチームは、ASP.NETアプリケーションの1つが特定のページでパフォーマンスの問題を抱えていたときに、NewRelicによって本日初めに報告されたこの「AcquireRequestState」の遅延を見ました。

根本的な原因は、最近SQL Serverデータベースに展開したストアドプロシージャの変更であることがわかりました。これにより、そのストアドプロシージャの実行に非常に長い時間がかかりました。ストアード・プロシージャーは、パフォーマンスの問題があったページを表示する一環として呼び出されました。

ストアドプロシージャのパフォーマンスの問題を特定して修正することで、問題を解決することができました。 NewRelicの「AcquireRequestState」問題は無関係であることが判明しました。原因ではなく、問題の症状でした。

これは、Windows Server 2008で実行されているASP.NET 4.5アプリケーション上にありました。

tl; dr: NewRelicによって報告された "AcquireRequestState"の遅延は、1つ以上のページやAJAXリクエストを引き起こしている他の問題の副作用である可能性がありますASP.NETアプリでは、読み込みに時間がかかります。

5
Jon Schneider

サーバーに Hotfix Rollup 2828841 を適用してみます。

第6号

症状

同じSessionIdを持つ多数の同時要求をASP.NET 4.5 Webアプリケーションに送信すると、一部の要求がRequestAcquireStateステージで予期せずフリーズすることがあります。

解決

修正プログラムを適用した後、修正プログラムは、EndRequestイベントが常にトリガーされることを確認します。

この修正プログラムは、Windows 7 Service Pack 1(SP1)、Windows Server 2008 R2 SP1、Windows Server 2008 Service Pack 2(SP2)、およびWindows Vista SP2に適用されます。

4

私はあなたのストアドプロシージャの変更がセッションロックの点でわずかに異なる問題を強調しているのではないかと思います。別のシナリオでもほぼ同じことが報告されていました。ここで述べたように、非同期セッションプロバイダーをテストすることをお勧めします。セッションアプリごとの同時リクエスト設定を使用していることを確認します。

https://stackoverflow.com/a/55331786/758105

最終的には、実行時間の長いプロセス(あなたの場合はストアドプロシージャの変更)が、そのセッションに対するそれ以降の要求をすべてブロックしています。この「ブロック」はIISパイプラインの別の部分で発生しているため、NewRelicは単に「AcquireRequestState」として記録します

PS:私はこの答えがかなり遅いことを知っていますが、私たちにとって同様の問題を解決する何かをようやく見つけました。将来的には多くの人々を助けることができると思います。

0
Martin Venter