2017-06-05 7 views
1

負荷がかかって起動したときに仮想ハングするasp.netコアアプリケーションで問題が発生しました。一度起動すると、アプリケーションは負荷を問題なく処理できます。すべての同時リクエストに対して初期化が行われているように感じます。他の誰かが同様の行動を経験していますか?Asp.Netロード時に起動したときのコアのパフォーマンスの問題

テストシナリオ:

    がに任意の開始前
  • の通知要求が始めるサービスが、非常に長い遅延を開始する50の同時タスク
  • でサービスをヒットテストアプリケーションを起動し
  • 終了し、ほとんどがタイムアウトします。

一時的な回避策として、私はサブセルを抑制するミドルウェアを作成しました非常に最初のものが終わるまで、要求を要求する。これにより、asp.net mvcは大量の要求を処理する前に初期化されます。この特定のアプリは、EFコアを持つasp.netコア1.1(Web API)です。

+0

こんにちは、同じ問題が発生しました。作成したミドルウェアについて詳しく説明できますか?私はそれを実装する良い方法を見ることができません...そして、あなたがその理由を見つけたなら、本当にそれを聞いて嬉しいです!ありがとう – Gouffe

+0

@Gouffe私はasp.netのコアスループットに関する問題に私のハックを投稿しました:https://github.com/aspnet/KestrelHttpServer/issues/1807#issuecomment-306329090 問題は本当に解決されずに閉じられました。私はそれをkestrelやef coreなどに追跡することができませんでした。これは、同時の要求に気をつけていない高価な初期化で、依存関係を使用しているように感じます。 – Kevin

+0

リンクをありがとう、残念ながら、それは私の問題を解決しません。私は初期化の問題を抱えていますが、無作為にasp.netのコアプロセスはまだ解明されていない状態で100%cpuになります。とにかくありがとう、非常に興味深い回避策! – Gouffe

答えて

1

全国の途中にある実際のデータベースを使用すると、ASP.NET Core WebAPIへの最初の要求に対して900msの遅延が発生します。これは、データベースに接続するために確立された接続プールを取得する必要があるためです。サービスを実行するときに、私は熱心に接続プールを作成しません。代わりに、サービスコンテナにシングルトンとして登録されている接続ファクトリを介して接続を要求すると、遅延が初期化されます。

おそらく、SQL ServerによってサポートされているEntity Framework Coreを使用していると同じタイプの遅延が発生している可能性があります。 この初期要求の一部としてデータベースとの接続プールが遅延して開始されていますか?

バニラ200 OKを返す依存関係のないコントローラを作成してください。ハイドレイトするために高価なサービスを持つグローバルフィルタがないと仮定すると、Webサービスのベースライン初期化パフォーマンスがわかるはずです。

関連する問題