![来自 Web 应用程序负载测试的请求爆发](https://linux22.com/image/506381/%E6%9D%A5%E8%87%AA%20Web%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E8%B4%9F%E8%BD%BD%E6%B5%8B%E8%AF%95%E7%9A%84%E8%AF%B7%E6%B1%82%E7%88%86%E5%8F%91.png)
我正在将我们的网络和数据库托管迁移到所有新机器上的新环境。我最近使用以下工具执行了负载测试:西太平洋太平洋铁路公司从多个分布式客户端生成负载。服务器有足够的空间来处理流量负载,但我在负载测试期间看到传入流量的奇怪模式。
以下是我们设置的要点:
- 在 Win 2k8 服务器上运行 MS Forefront TMG 2010 的防火墙服务器
- 请求路由由防火墙计算机上的 IIS 应用程序请求路由完成
- Web 服务器是数据库服务器(即主机操作系统)上的 Hyper-V VM
- 这些机器配备了双六核 CPU(总共 12 个处理器)
- 运行 IIS 7.5 的 Web 服务器
- 使用 ASP.NET 2.0 构建的 Web 应用程序,前端带有 1 个 ISAPI 过滤器(Url Rewrite)
我在负载测试期间看到,请求都是突发的。尽管我有 7 个不同的分布式客户端发送流量负载,但每次请求量大约为 300-500 个。
性能监视器显示几乎所有计数器都按照这种模式运行,请求突然增加,请求/秒跃升至 70,排队请求跳升至 500,当前请求跳升,CPU 跳升,一切都在发生。然后,一旦处理完这组请求,它会暂停近 10 秒,几乎没有任何事情发生。0-5 请求/秒,0 排队请求,CPU 使用率最低。然后在 10 秒不活动之后,又一次爆发,再次使所有计数器飙升。
我无法理解的是,为什么请求会以突发的方式发送,而我知道生成的负载不是以这种方式发送的,尤其是考虑到各种负载生成客户端以不同的间隔发送流量,并且每个请求之间的思考时间都是随机的。Hyper-V 之间的层中是否存在某种东西,或者硬件中是否存在某种东西,可能导致这些请求合并在一起?
这是我正在查看的内容,突出显示的指标是“请求数/秒”,但其他关键计数器也与之相关:排队请求数(我显然希望将其保持尽可能接近 0)。
对此有什么想法吗?
答案1
经过大量的测试和研究,我通过 WAPT 负载测试工具解决了这个问题。有些设置经过调整后会改变这种模式。
我设置了 WAPT 实例并在 Web 服务器和生成负载的机器上使用性能监视器后,确认这是 WAPT 测试工具的产物。很容易关联到网络接口上发送的数据包峰值与 Web 服务器上的请求/秒的间隔和时间相同。