我正在使用JMeter进行负载测试。我正在进行一个练习,通过简单地增加分布式JMeter测试用例中的线程数,并启动测试,来找到我们的Web服务器可以处理的最大并发线程数(用户)。
然后,我突然想到,虽然MAX数字可能很有用,但我的网站平均实际处理的REAL用户数量是我使测试富有成效所需要的数字。
以下是关于我们设置的一些信息:
- 这是一个.NET/Classic ASP混合网站。登录后,会在两者中为用户创建一个浏览器会话(带超时)
- 每次会话在60分钟后超时
有没有一种方法可以使用这些信息、IIS日志、性能计数器和/或一些计算来帮助我确定我们在生产站点上处理的并发用户的平均数量?
您可以使用带有QUANTIZE函数的logparser来确定在适当的时间间隔内请求的峰值数量。
对于10秒的窗口,它将类似于:
logparser "select quantize(to_localtime(to_timestamp(date,time)), 10) as Qnt,
count(*) as Hits from yourLogFile.log group by Qnt order by Hits desc"
报告的计数与线程或用户不完全相同,但它们应该有助于让您指向正确的方向。
进行精确计数的最佳方法可能是使用性能计数器,但我不确定任何标准计数器是否能像您想要的那样工作——您可能需要创建一个自定义计数器。
我可以在这里看到几个选项。
-
使用性能监视器获取当前数字,或者将其记录一整天并获取平均值。ASP.NET有一个"请求当前"计数器。根据这个页面,经典ASP也有一个请求当前,但我自己从未使用过。
-
通过日志分析器运行IIS日志,以获取请求的总数以及每个请求所用的时间。我想,如果你知道每小时有多少请求,每个请求需要多长时间,你就可以得到有多少请求同时运行的平均值。
此外,请记住,并发用户与服务器上的并发线程并不完全相同。首先,在下载图像等内容时,每个用户将有多个线程处于活动状态。之后,当服务器空闲时,用户将在页面上停留几分钟。
我的建议是首先定义停止条件,例如
- 最大CPU利用率
- 最大内存使用量
- 请求的最长响应时间
- 您喜欢的其他关键参数
选择参数真的很主观,我个人无法提供太多经验。
其次,您可以查看性能计数器或IIS日志是否可以映射到参数。然后设置适当的映射。
第三,您可以通过模拟N个用户(线程)开始测试,看看是否满足停止条件。如果未命中,则可以转到更高的数字。如果命中,可以使用较小的数字。递归地,你会发现一个粗略的数字。
然而,这并不意味着你的网站在现实世界中可以容纳这么多用户。到目前为止,没有任何模拟能够覆盖所有边缘情况。