【问题标题】:Use Visual Studio Goal based load pattern to achieve a consistent request per second使用基于 Visual Studio 目标的负载模式来实现每秒一致的请求
【发布时间】:2012-07-16 21:41:50
【问题描述】:

我正在使用 Visual Studio 2010 测试 ASP .NET Web 服务。我希望能够为请求/秒设置一个相当低的目标(比如 20)并以良好的精度实现它(比如 +/- 2%)。我正在使用 ASP.NET Apps v4.0.30319 类别中的性能计数器“请求/秒”。

我的 WebTest 的持续时间变化很大,负载测试会保持不同数量的用户。当我查看结果图时,RPS 介于 0 和 60 之间,并且不断上升和下降。

有没有什么方法可以让 VS 从控制器的角度发射一个恒定的 rps。甚至是固定测试/秒。

也许一个计数器可以让我测量每秒发起的请求而不是请求/秒,因此周转时间的变化不会产生影响。

【问题讨论】:

    标签: asp.net visual-studio-2010 load-testing stress-testing


    【解决方案1】:

    做到这一点的唯一方法是使用多个线程 - 如果所有请求都必须等待并且您没有使用异步 IO,则可能多达 RPS * ConnectionTimeout 个线程。

    您可以作弊并使用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 机制 described here,因为它允许使用有限数量的线程进行许多连接。

    This article 也可能对线程感兴趣

    【讨论】:

      猜你喜欢
      • 2012-08-07
      • 1970-01-01
      • 2018-06-01
      • 2018-07-16
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多