我们正在开发一个 Web 应用程序,它必须能够承受明显的负载量。我在 HP (Proliant DL 380) 服务器(两个 3.6GHz Xeon cpus、16 GB 内存……)上运行我的测试。我正在使用 Apache JMeter 和 pylot 来运行负载测试(它们有点显示类似的结果)。
在一种情况下,我将负载测试程序配置为尽可能多地使用一个线程来访问我的索引页面。索引页面大约 60KB,包含大约 10 个 ajax 调用、大量 JavaScript 和 jQuery 代码、所需的 CSS 等。我得到的结果是,嗯,令人失望。
完整的 index.jsp 页面:
- 吞吐量(请求/秒):3.567
- 响应时间(秒):0.278
所以我删除了每个 ajax 调用,摆脱了图表和 CSS(但不是 JS)
- 吞吐量(请求/秒):6.082
- 响应时间(秒):0.161
还是很低!所以我建立了一个 HTML 格式的静态索引页面,其中包含所有相同大小的数据(没有任何服务器端和客户端计算)
- 吞吐量(请求/秒):20.787
- 响应时间(秒):0.046
哇,这是一个突破!现在我在 index.html 页面中添加了一些 JavaScript 代码
- 吞吐量(请求/秒):9.617
- 响应时间(秒):0.103
嗯,我想瓶颈已经找到了,Java Script 代码。我需要找出“服务器”可以处理多少请求/秒,并且由于 java 脚本是在客户端运行的,我认为我不应该将它包含在这个测试中。那么负载测试工具应该处理JS代码吗?(他们似乎正在这样做)
另一个关键问题是,根据硬件、内容大小和上述配置,这样的吞吐量是否合理?我不应该期待更多吗?我的期望是 500 请求/秒!是添加硬件的唯一解决方案吗?!
顺便说一句,webapp 是使用 Java+Struts2+JSP+Hibernate+MySQL 构建的。它还使用 haproxy 分布在多个服务器上。但是上述测试是在单个服务器上运行的。