JMeter 慢 "Retrieve all embedded resources" - 我该如何缩放?

JMeter slow with "Retrieve all embedded resources" - how do I scale?

TLDR:

更多详情:

我正在使用 BlazeMeter Chrome 扩展程序录制 jmx 脚本。用户登录并完成课程和测试。在此过程中提出了许多 ajax 请求。脚本大约有 350 - 400 个步骤。大多数 ajax POST 请求有 json 响应。

当我在 Chrome 中手动点击时,网站加载速度很快。也许页面加载最多需要 2 秒。

但是当我将该脚本导入 JMeter 并将“检索所有嵌入式资源”和“并行下载”设置为 6,并且 运行 它(在 GUI 中最初只有 1 个用户)时,它将比如说,快速完成 7 步,然后就挂起,有时会挂 10 分钟以上,然后再进入下一步。如果我取消选中“检索所有嵌入式资源”,则不会发生这种情况,但我不想这样做,因为那不是一个现实的测试。

如果我对 100 个用户进行同样的测试 运行(从命令行使用 JVM_ARGS='-Xms4096m -Xmx4096m' sh jmeter -n -t myfolder/mytest.jmx -l myfolder/testresults.jtl),我会得到 Uncaught Exception java.lang.OutOfMemoryError: Java heap space in thread Thread,我的电脑风扇会发疯。

我配置了一个 HTTP 缓存管理器,仅选中“在处理 GET 请求时使用 Cache-Control/Expires header”,并且我已将“缓存中的最大元素数降低到 10,因为那是只有这样我才能得到测试 运行ning。

理想情况下,我想一次测试数千个用户,但如果我不能可靠地测试 100 个用户,我不明白我应该如何扩展到数千个。

我看到还有其他 cloud-based 测试选项,我现在已经尝试了一些,但是在配置如何测试登录用户时我总是停顿下来。似乎大多数解决方案都不支持这个。

感觉应该是很多人过去应该遇到过的事情,但我发现几乎没有人遇到过这些问题。在 Web 应用程序上对数千 logged-in 用户进行负载测试的正确方法是什么?

  1. 如果 JMeter 在检索嵌入式资源时“挂起”10 分钟,则此特定资源有问题,您可以使用 View Results Tree listener and either raise a bug for this particular "slow" component or exclude it from the scope using HTTP Request Defaults 查看每个资源的响应时间。您还可以在那里指定超时,如果请求不会 return 在给定的时间范围内做出响应 - 它将被标记为失败,因此您不必等待 10 分钟:

  2. 您增加堆的方式是正确的,看起来 4Gb 不够,您要么必须提供更多,要么考虑切换到 distributed testing

  3. 确保在任何情况下都遵循JMeter Best Practices。如果您的“计算机风扇发疯”,则意味着 CPU 使用率非常高,因此 JMeter 很可能无法足够快地发送请求,因此您将获得 false-negative 结果。