59

NewRelic を使用して、サーバー側のアプリケーション トレースを提供しています。

一部のアプリケーションでは、メソッドで約 100 ミリ秒を一貫して費やしていることに気付きましたSystem.Web.Mvc.MvcHandler.BeginProcessRequest()

これは、カスタム コントローラー コードが呼び出される前に発生します (これは個別にログに記録され、累積的にではありません)。なぜこのメソッドに多くの時間を費やすのかは明らかではありません。

このメソッドで MVC はどのようなことを行いますか? これは単にリクエストのキューイングでしょうか?

[編集:]疑わしい - 以下のScalayerの答えは的を射ていました。セッションの依存関係をすべて削除して最適化した結果、アプリケーションのスケーラビリティと安定性が大幅に向上しました

4

4 に答える 4

6

特定のコントローラーが単一のユーザーからの要求を並行して処理できるようにする場合は、バージョン 3 以降の MVC で導入された SessionState という名前の属性を使用できます。並列処理を実現するためにセッションレス コントローラーを使用する必要はありません。 SessionStateBehavior の Ready-only オプションを使用すると、Session データに基づいて実装したセキュリティ チェックに合格できます。

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public class ParallelController : Controller
{
    ...
}

System.Web.Mvc.MvcHandler.BeginProcessRequest()いくつかの長時間実行アクションを実行しようとすると、にも遅延があり、 でそれを見ましたNewRelic。この属性により問題が解決され、このコントローラーのアクションを並行して処理できるようになりました。

于 2014-03-20T17:42:05.037 に答える
0

これを読んで説明のつかない IIS の高い CPU 使用率を経験している人は、私が開いた NewRelic サポート フォーラムのこのスレッドを参照してください。

問題の根本原因が彼らのエージェントであることに気付くまで、私はこの問題に1週間以上対処してきました.

.NET エージェントが原因で IIS の CPU 使用率が高くなる

そのため、より複雑な実験に飛び込む前に、まず .NET エージェントを削除して、変更があるかどうかを確認することをお勧めします。

この問題に取り組んでいるときに最初にここにたどり着いたので、この特定の質問にこの回答を投稿し、スレッドの敏捷性が正しくない長いコースに私を設定しました...(それ自体は非常に興味深いですが)。

于 2014-09-17T06:29:18.903 に答える