2

Visual Studio 2010 を使用して ASP .NET Web サービスをテストしています。リクエスト/秒のかなり低い目標 (たとえば 20) を設定し、それを高い精度 (たとえば +/- 2%) で達成できるようにしたいと考えています。カテゴリ ASP.NET Apps v4.0.30319 の perfmon カウンター 'Requests/Sec' を使用しています。

私の WebTest は期間が大きく異なり、負荷テストではさまざまな数のユーザーが維持されます。結果グラフを見ると、RPS は 0 から 60 の間を行き来し、上下し続けています。

コントローラーの観点から一定の rps を発射するように VS を設定する方法はありますか。または固定テスト/秒でも。

おそらく、リクエスト/秒ではなく1秒ごとに開始されたリクエストを測定できるカウンターであるため、ターンアラウンドタイムの​​変動は違いを生みません。

4

1 に答える 1

1

これを行う唯一の方法は、複数のスレッドを使用するRPS * ConnectionTimeoutことです。すべてのリクエストを待機する必要があり、非同期 IO を使用していない場合は、複数のスレッドを使用する可能性があります。

ThreadPoolをチートして使用することができます(ただし、スケジューリングに関しては保証されないことに注意してください)。.Net 4 を使用している場合は、Task Parallel Libraryもあります。

~20 RPS の場合、ThreadPool の精度の欠如が問題になるとは思えません。RPSが高くなると、それは変わります。

DIYしたい場合は、適切に行うのは難しいことに注意してください. 簡単な実装は、接続ごとに新しいスレッドを起動するメイン ワーカー スレッドを用意することです...

Private ShutdownRequested As Boolean = False
Public Sub StartLoad(RPS As Integer)
    ShutdownRequested = False
    Dim MainThread As New Threading.Thread(Sub() Worker(RPS))
    MainThread.Start()
End Sub

Public Sub StopLoad()
    ShutdownRequested = True
End Sub


Private Sub Worker(RPS As Integer)
    While Not ShutdownRequested
        Threading.Thread.Sleep(CInt(1 / RPS * 1000))
        Dim Worker As New Threading.Thread(Sub() OpenAConntection())
    End While
End Sub

ここで説明する非同期 IO メカニズムを使用すると、限られた数のスレッドで多くの接続が可能になるため、より良い方法になります。

この記事は、スレッド化に関しても興味深いかもしれません

于 2012-07-17T22:07:01.013 に答える