我正在将我们的 Web 和数据库托管迁移到所有新机器上的新环境。我最近使用WAPT执行了负载测试,以从多个分布式客户端生成负载。服务器有足够的空间来处理流量负载,但我在负载测试期间看到传入流量的奇怪模式。
这是我们设置的要点:
- 在 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 之间的层或硬件中是否有某些东西可能导致这种请求合并在一起?
这是我正在查看的内容,突出显示的指标是 Requests/sec,但其他关键计数器也随之而来:Requests Queued(我显然希望尽可能接近 0)。
对此有什么想法吗?
经过更多的测试和研究,我已经解决了这个问题,因为它是 WAPT 负载测试工具的结果。有一些设置在调整后会改变这种模式。
一旦我设置了一个 WAPT 实例并在 Web 服务器和生成负载的机器上使用了性能监视器,我就确认这是 WAPT 测试工具的产品。很容易关联到在网络接口上发送的数据包以与 Web 服务器上的 Requests/sec 相同的间隔和时间出现峰值。