如何在分布式性能测试中验证 JMeter 的性能?

How to verify JMeter's performance on a distributed performance test?

我正在进行 REST API 性能测试,我必须同时执行大量请求。为此,我使用了 3 个 JMeter 实例(1 个主实例和 2 个从实例)。

为了给你更多的竞争,我做了一个带有 2 个线程组的 JMeter 脚本,在每个组上我有 150 个线程和一个恒定的吞吐量计时器。

这是我用来启动测试的命令行:

./jmeter -n -t ./script.jmx -l ./samples.csv -e -o ./dashboard -R 127.0.0.1,192.168.1.96,192.168.1.175 -Gthroughput=900000 -Gduration=10 -Gvmnb=3 -G ./API.properties

在此命令行中,throughput 是我为 3 个服务器设定的总吞吐量(它的值除以 vmnb,我的第3个变量,然后每个服务器做这部分吞吐量)和duration是测试的持续时间。

在这种情况下,持续 10 分钟的恒定吞吐量应为 900K(每台服务器 300K)。加速期为 5 分钟 (duration/2)

现在我的问题是:

如果我理解正确,最后我的结果文件中应该有 900K * 10 分钟 = 9000K 个样本(根据 API)。

在我的 JMeter 仪表板上,每个 url 我只有 200K 和 160K 个样本。即使它只能设法看到主服务器(我认为),我离预期的结果还很远,不是吗?

dashboard image (I can't upload an image yet...)

我是不是遗漏了什么,或者我的 VM 有一些性能问题,它们无法提供高吞吐量?

在此先感谢大家的帮助,

此致, 马克

  1. JMeter master 不生成任何负载,它只加载测试计划并将其发送到从属实例,因此在您的设置中您有 2 个负载生成器
  2. Constant Throughput Timer can only pause the threads to limit JMeter's throughput to the given value 所以你需要确保您有 足够的线程 来产生所需的吞吐量。如果您的目标是 10 分钟内 9M 个样本,则意味着每个从站每分钟 900k 个样本或每分钟 450k 个样本,每秒提供 7500 个请求。为了使用 150 个线程每秒处理 7500 个请求,您需要 0.02 秒的响应时间,而您的平均响应时间约为 1 秒。

    假设以上情况,我建议切换到 Throughput Shaping Timer and Concurrency Thread Group combination. They can be connected via Scheduled Feedback Function,这样 JMeter 将能够启动额外的线程以达到并维持定义的吞吐量。

  3. 还要确保遵循 JMeter Best Practices,因为 7500 RPS 是一个相当高的负载,您需要相信 JMeter 能够足够快地发送请求