http - 如果我不断增加线程数,平均响应时间如何保持或多或少不变?
问题描述
我有一个运行 2 小时的简单压力测试场景。我已经配置了 3000 个线程,以便在整个测试期间进行加速。这只是一个重复多次的 HTTPS POST 请求,每次请求都会更改 json 正文数据。客户端在一个系统上,而服务器在另一个系统上。我只是用一些输入数据调用一个 API,该 API 在文件中查找数据并用硬编码的任何内容进行响应。
尽管随着时间的推移我不断增加线程数,但系统上的负载却没有按比例增加,这怎么可能呢?
我问这个是因为几天前在做这个测试时,平均响应时间随着我的线程(虚拟用户)的增加而成比例地增加。现在,当进行相同的测试时,这种增加不再发生——这就是为什么现在我猜测开发人员已经设置了一些最大 TPS 限制。
有人可以帮我理解这怎么可能吗?没有错误代码。
似乎服务器以某种方式限制了客户端,但我不明白通过哪种机制,也不知道哪个 jmeter 结果图会向我展示更清晰的证据。如果有人可以帮助我理解,我将不胜感激。
解决方案
您正在显示来自不同测试执行的结果,因此我们无法正确关联它们,即响应时间从 开始,23:15
其他 2 个图表以 结束23:01
。
一般来说,行为良好的系统的吞吐量应该与增加的负载成比例地增加。如果它没有发生 - 应该对此进行解释,即
- 响应时间增加,请尝试查看 和 之间的持续时间的响应
22:23
时间23:01
- JMeter 无法足够快地发送请求,请确保遵循 JMeter 最佳实践并使用即JMeter PerfMon 插件监控负载生成器资源,如 CPU、RAM 等
- 由于配置或实施限制,应用程序无法足够快地响应,请使用APM或Profiler工具检查 API 调用背后发生的情况
- JMeter 不报告错误的事实并不一定意味着没有错误,您的应用程序可能会以HTTP 状态代码 200进行响应,但正文包含错误详细信息,因此查看 ie随时间变化的字节吞吐量图表是有意义的查看传输的数据量是否随着用户的到达而增长。您还可以考虑将断言添加到您的请求中,以确保您的测试正在做它应该做的事情
推荐阅读
- java - 如何使用joda在一个格式化程序中将两个相似的字符串解析为日期时间?
- java - i>>=1 比 i/2 更有效
- angular - PrimeNG + Angular:重置常用数据表
- postgresql - PostgreSQL {call Update Set ...} 得到“SET 处或附近的语法错误”
- python - Sklearn 的 PCA 给出最后一行的“错误”输出
- r - 如何绘制原始数据,但在 ggplot2 R 中使用线拟合的预测值?
- php - Php:符号链接的层级太多?
- java - EMR Spark java应用GC问题
- javascript - 反应加载微调器+ Redux?
- php - 使用 Symfony 4 将用户重定向到匿名用户的登录页面