如果我不断增加线程数,平均响应时间如何保持或多或少不变?

How can the average response time remain more or less constant if I keep increasing the number of threads?

我有一个运行 2 小时的简单压力测试场景。我已经配置了 3000 个线程,以便在整个测试期间加速运行。 这只是一个 HTTPS POST 请求重复多次并更改每个请求的 json 正文数据。客户端在一个系统上,服务器在另一个系统上。我只是用一些输入数据调用 API 并且 API 在文件中查找数据并用硬编码响应的任何内容进行响应。

怎么可能随着时间的推移,我一直在增加线程数,而系统的负载却没有按比例增加?

我问这个是因为几天前做这个测试时,平均响应时间随着线程(虚拟用户)的增加而按比例增加。现在在做同样的测试时,这种增加不再发生——这就是为什么现在我猜测开发人员设置了一些最大 TPS 限制。

这是随时间变化的响应时间结果:

这是总 TPS:

随时间变化的活动线程数结果:

随时间变化的字节吞吐量:

有人可以帮我理解这是怎么可能的吗?没有错误代码。

似乎服务器以某种方式限制了客户端,但我不明白通过哪种机制,我不知道哪个 jmeter 结果图会向我展示更清楚的证据。 如果有人能帮助我理解,我将不胜感激。

您显示的是不同测试执行的结果,因此我们无法正确关联它们,即响应时间从 23:15 开始,另外 2 个图表在 23:01 结束。

一般来说,运行良好的系统的吞吐量应该与增加的负载成比例地增加。如果没有发生 - 应该有一个解释,即

  1. 响应时间增加,请尝试查看 22:2323:01
  2. 之间持续时间的响应时间
  3. JMeter 发送请求的速度不够快,请确保遵循 JMeter 最佳实践并使用 JMeter PerfMon Plugin
  4. 监控您的负载生成器资源,如 CPU、RAM 等
  5. 由于配置或实施限制,应用程序响应速度不够快,请使用 APM or Profiler 工具
  6. 检查 API 调用的幕后情况
  7. JMeter 不报告错误的事实并不一定意味着没有错误,您的应用程序可能会以 HTTP Status Code 200 but the body contains the error details so it makes sense to look at i.e. Bytes Throughput Over Time chart to see if the volume of transmitted data grows as the users arrive. You can also consider adding Assertions 响应您的请求,以确保您的测试正在执行预期的操作做

问题可能是由于客户端限制了实际执行的线程数造成的。换句话说,线程可能在负载生成器处排队。请参阅 Gunter 博士 How to Get Unbelievable Load Test Results,特别是 4.4 Threads That Throttle 部分以获得详细解释。该论文展示了一种使用 Little 定律来估计已执行的实际线程数的方法。