2

我们正在开发一个 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 分布在多个服务器上。但是上述测试是在单个服务器上运行的。

4

3 回答 3

2

如果您正在寻找的是服务器可以多快地提供内容的原始数字,那么我会说是的,忽略 java 脚本并专注于传输页面的所有各个位(HTML 、图像、脚本文件、CSS 等)。

但是,如果您正在尝试测试用户体验,那么 JS 就是其中的一部分,因此您需要考虑到这一点。根据您的描述,您并不担心用户体验,而是担心加载到服务器。

您可能需要考虑设置 JMeter 以直接调用您的页面片段,如上面第一句所述。

于 2012-11-11T12:22:09.217 回答
1

您的 JavaScript(CSS、图像)是直接嵌入页面还是从脚本标签加载的?后一种情况将迫使浏览器从服务器下载文件,立即将您的分页速度减半。这就是您应该从不同的服务器(例如 Google)加载 jquery 的原因之一 - 这将对用户感知的影响较小页面加载时间(要进行一次额外的 DNS 查询),但确实减轻了服务器的负载

于 2012-11-11T12:27:25.223 回答
1

另一个关键问题是,根据硬件、内容大小和上述配置,这样的吞吐量是否合理?我不应该期待更多吗?我的期望是 500 请求/秒!是添加硬件的唯一解决方案吗?!

编写应用程序以使页面可缓存,然后在应用程序前面放置一个 http 代理通常是一个好策略。

于 2012-11-11T12:28:00.117 回答