2016-10-18 4 views
0

私はIISアプリケーションを持っています。私たちのアプリの負荷テストでは、スループットが非常に低いことがわかりました。この問題を解決しようとしている間に、1000バイトの静的データを返すテストロードをテストしました。コントローラでスリープしました。スリープ時間が1秒の場合、IISは10秒間などの負荷を超えると1秒以内に要求を処理できません。IIS:ハイスループットを取得できません。

私はConcurrent Requestsとpost .Net 4.5のデフォルト値5000を読んでいます。IISが5000の同時リクエストを処理している場合、どのリクエストが10 rpsでリクエストを処理できないのでしょうか?二番目?数学は合わない。

静的なデータが返され、データサイズが小さく、すべての機能がスリープすることに注意してください。したがって、CPU、ディスク、ネットワークなどのマシンパラメータのどれも限界を超えません。サーバーはほとんど点滅しません。

一部静的HTMLが返し、これは全体コントローラコード

public ActionResult Contact() 
{ 
    Thread.Sleep(1000); 
    return View(); 
} 

図です。私はVisual Studioテンプレートを使ってWebアプリケーションを作成しました。テンプレートは静的HTMLを返します。

私はスリープを解除すると、高いrpsでサーバを稼動させるのに問題はありません。しかし、要求が非常に速く、IISは高いrpsでも高い並行性に遭遇することさえありません。

答えて

0

すべてのリクエストは同じセッションに属していますか?その場合は、this postが問題の原因を示します。

基本的に、ASP.NETセッションはスレッドセーフではなく、同じセッションからの並列要求を持つことはできません。 ASP.NETは呼び出しをシリアル化して順次実行します。これにより、Thread.Sleep()に電話をしたときに表示されるブロックが発生します。

要求が異なるセッションから来た場合、ブロックされていないはずです。いずれのケースでは、セッションをオフにturining試すことができます。

<sessionState mode="Off" /> 
+0

私はシンプルなC#の負荷テストプログラム HttpWebResponseのobjWebResponse =(HttpWebResponseの)objRequest.GetResponse()を持っています。 目的の負荷を得るために複数のスレッドから呼び出されるスレッド。明示的なセッション作成はありません。その結果、IIS上で同じセッションが行われますか?私はセッション情報を返信していないので、私は推測しません。 – Amit

+0

特に指定のない限り、レスポンスにクッキーとして返されるセッションIDがあります。後続の要求がそのCookieを送信すると、ASP.NETはそれらをすべて同じセッションの一部として扱います。セッション状態をオフにして、それがあなたのケースでうまくいくかどうかを確認するのは価値があります。 – Connor

+0

私はそれを試みます。そのロードジェネレータを介してクッキーを返送することはありません。 – Amit

関連する問題