如何使用Jmeter和并发线程组实现一致的吞吐量

wr98u20j  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(324)

我们正在尝试使用Jmeter对系统进行压力测试,我们的hit a wall吞吐量不一致,因此我们安装了Jmeter插件Concurrency Thread GroupThroughput Shaping Timer。我们目前在单个端点上运行它,以确保我们可以实现一致的吞吐量。我们设置:

  • 吞吐量调整计时器设置为30 RPS,持续60秒,其作用域直接位于并发线程组下

  • 使用tstFeedback函数作为tstFeedback(tst,13,50,10)的目标并发性,因为最大响应时间大约为1000

我们最初达到了预期的RPS,但每次尝试测试时,它都将达到接近30 RPS:

但是,在几个小时后,配置或系统没有发生任何变化,RPS不再达到预期值,我们将持续获得较低的RPS(范围在20和27 RPS之间):

我们尝试增加目标并发性,但它对RPS没有影响,并且始终低于预期。我们尝试从本地计算机使用GUI和CLI,并在安装了Jmeter的远程示例上使用CLI,我们在本地和远程示例上运行最新的Jmeter版本(目前为5.5),但它没有影响:
x1c4d 1x指令集
增加HEAP也不会有什么不同
当我们提高本地计算机上的日志记录级别以诊断问题时,此错误会频繁出现:

o.a.j.p.h.s.HTTPHC4Impl: IOException
java.net.SocketException: Socket closed

测试示例规范

  • 在AWS m6i.8xlarge示例上设置远程示例
  • 本地计算机具有16 GB内存,采用英特尔i7第八代处理器
  • 所有测试均在Ubuntu计算机上运行

问题/疑问

我们需要尽可能准确地模拟客户行为,因此,在请求中实现一致的吞吐量至关重要。我们如何做到这一点?

daupos2t

daupos2t1#

1.查看您的吞吐量整形计时器配置,我可以看到它被设置为启动最多50个线程。
1.只有在响应时间小于1.6秒或更少的情况下,才能在50个线程的情况下达到每秒30个请求。
1.从您的报告中查看响应时间,我可以看到平均响应时间超过2秒,这完美地解释了您无法达到吞吐量的事实。
检查事项:
1.请务必遵循JMeter Best Practices
1.确保JMeter在CPU、RAM、网络、磁盘等方面有足够的运行空间。这可以通过使用JMeter PerfMon Plugin来实现
1.如果您无法从单个JMeter示例执行所需的加载-请考虑使用Distributed Testing
1.最后,可能是您的应用程序无法每秒处理那么多请求,因此值得检查其日志、遥测等。

相关问题