当前位置: 首页 > 知识库问答 >
问题:

JMeter发送的请求比预期的少

柯立果
2023-03-14

我使用jmeter来生成一个性能测试,为了保持简洁,我从一个json文件中读取初始数据,我有一个单线程组,在读取数据后,我在其中随机设置某些值,以防止需要时数据重复,然后我使用变量将最终数据传递给endpoint,这将最终在一个由endpoint接收的json主体中,它基本上将在数据库中生成一个新的事务。此外,我添加了一个常量计时器,在请求之间添加了7秒的延迟,测试持续时间为10分钟,没有上升,我计算每秒的请求如下所示:

1分钟有60秒,每个请求有7秒的延迟,那么可以说,每分钟我发送大约8.5个请求,这是我的计算(60/7)=8.5,如果测试持续10分钟,那么我乘(8.5*10)=85,在10分钟内总共有85个事务,所以在测试完成后,我应该能够看到数据库中创建的完全相同数量的事务。

当我运行10-20-40个用户时,这是真的,在负载测试运行后,我查询数据库,我得到了完全相同的事务数。然而,当我增加线程组中的用户时,这种情况就不再发生了,例如,如果我设置1000个用户,我应该能够在10分钟内生成8500个事务,但事实并非如此,db只创建了大约5.1k个事务。

发生了什么,出了什么问题?为什么它最初按预期工作,而当我增加用户时,它就不工作了?如果需要,我可以提供更多的信息。请帮忙。

共有1个答案

淳于哲
2023-03-14

这可能有两个原因:

>

  • 您发现了应用程序瓶颈。当您添加更多的用户时,应用程序响应时间会增加,因此吞吐量会降低。有一个术语叫做饱和点,它代表系统的最大性能,如果你超过这个点--系统将响应更慢,你将得到比最初更少的TPS。从测试中的应用程序来看,您应该了解以下几个方面:

    • 可能是您的应用程序缺乏资源(CPU、RAM、网络等),请确保它有足够的空间使用JMeter PerfMon插件进行操作
    • 您的应用程序中间件(应用程序服务器、数据库、负载均衡器等)没有为高负载正确设置。确定应用程序基础结构堆栈,并确保遵循每个组件的性能调优指南
    • 也有可能您的应用程序代码需要优化,您可以使用分析工具检测最消耗时间/资源的函数、最大的对象、最慢的数据库查询、空闲时间等。

    JMeter发送请求的速度不够快

    • 就像测试中的应用程序一样,检查JMeter机器是否有足够的资源(CPU、RAM等)
    • 确保遵循JMeter最佳实践
    • 考虑进行分布式测试

  •  类似资料:
    • 我如何才能为并行请求获得相同的性能?这是线程池问题吗?

    • 我在分析Wireshark时注意到了这一点。在线程组下,这些请求是: 主页/帐户/登录 主页/ 主页/livealarm等。 测试脚本由blazemeter chrome插件记录。 另一个无意的请求HTTP GET/signalr/hubs HTTP/1.1\r\n是由jmeter发送的,但它也是在使用浏览器时发送的。因为它不在示例列表中,所以“Accept”字段在browser和JMeter之间

    • 我有一个restful请求,需要使用JMeter将其发送到webservice。以下是我的建议: 异常:服务器11.92.0.91在org.apache.commons.httpclient.httpmethodbase.readstatusline(httpmethodbase.java:1976)在org.apache.commons.httpclient.httpmethodbase.jav

    • 在JMETER中,高级选项下的Http请求,我选择了'IP/Hostname'并添加了IP地址。我还将目标IP添加到计算机中的“高级TCP/IP设置”中,但仍然得到以下错误: 在org.apache.http.conn.socket.plainConnectionSocketFactory.connectSocket(plainConnectionSocketFactory.java:72)在or

    • 发送请求 发送同步请求 Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/ Web3ClientVersion web3ClientVersion = web3.web3ClientVersion().send(); String clientVersion = web3Client

    • 我有一个小的Spring Boot API在docker中运行。下面显示的是我用来升级容器的命令。 然后,我有一个停靠的JMeter,我使用下面的命令来启动它 但是所有的测试都失败了,请求没有被发送到API。这就是JMeter的CLI的外观 请求的测试配置: 协议:htttp 服务器:localhost 端口:8080 方法:GET 路径:/api/factorial 完整的bash文件如下所示: