JMeter:更多HTTP请求会带来更高的性能?

时间:2016-05-31 18:23:01

标签: performance jmeter

我试图了解我的Jmeter测试中显着的性能提升。

在多租户数据库环境中,我有一个RESTful服务测试,其中包含一个线程组,其中一个HTTP请求采样器发布XML有效负载。然后通过存储过程评估XML有效负载,并收到响应,说明声明是否合格。我在运行单个JVM的Apache 7环境中从.bat文件( non-gui mode )运行此测试。

测试线程组属性

# of Threads: ${__P(test.threads,200)}
Ramp-Up Period: ${__P(test.rampup,1)}
Loop Count: Forever
Delay Thread: Enabled
Scheduler: Enabled
Duration: ${__P(test.duration,1800)}

HTTP请求

Method: POST
https://serverName:port/database/.../${__P(tenant,1111)}/Claim/${__property(contractId)}

当我在TG中复制HTTP请求采样器并更改URL中的租户ID时,由于某种原因,性能似乎会增加> 55%。 (即,声明/秒的数量增加了55%)看来测试没有失败,所以我无法将性能提升归因于错误率的增加。

如果我启用了另一个JVM让Load Balancer执行优化,我本来期望增加,但事实并非如此。 (仍然只使用1个JVM

HTTP请求1

https://serverName:port/database/.../${__P(tenant,1111)}/Claim/${__property(contractId)}

HTTP请求2

https://serverName:port/database/.../${__P(tenant,2222)}/Claim/${__property(contractId)}

这里的理论是,Jmeter为多个请求生成的工作负载比单个请求的工作负载高。我对此持怀疑态度,但却找不到任何东西"固体"支持我的怀疑。

这个理论是真的吗?如果是这样,为什么两个HTTP请求会提高性能?

2 个答案:

答案 0 :(得分:3)

简而言之:没关系。

更长的版本:

以下是JMeter的工作原理:

  1. JMeter在加速期间启动所有线程
  2. 每个线程开始颠倒(或根据Logic Controllers
  3. 执行采样器
  4. 当请求没有更多的采样器执行时,没有更多的循环来迭代它被关闭。
  5. 那么虚拟用户的数量如何与"性能"相关联。当您为负载测试增加虚拟用户的请求数时,会影响吞吐量

      

    吞吐量计算为请求/时间单位。时间从第一个样品的开始到最后一个样品的结束计算。这包括样本之间的任何间隔,因为它应该代表服务器上的负载。

         

    公式为:吞吐量=(请求数)/(总时间)。

    因此,如果在性能良好的系统上增加负载,则吞吐量应增加相同因子或线性增加。

    当你增加负载但吞吐量没有增加时,这种情况被称为"饱和点"当您从系统获得最大性能时。进一步的负载增加将导致吞吐量下降。

    参考文献:

答案 1 :(得分:0)

你怎么弄乱你的表现?根据你的“理论”,你的麻烦包括jmeter开销,这是错误的。更重要的是,这两种情况的反应是否相同?我的意思是,后端做同样的工作是否都适用于两种情况?

也许第一个请求返回不同的输出然后另一个请求。也许在其中一个请求中生成输出会更昂贵。这就是为什么你会注意到“增加”的性能,因为通常你会在X秒内完成N x重任务,而在第二种情况下G x重任务+ HX轻工作在同一时间G < N/2 - 更多请求同时?当然!增加性能?不。

因此,要完整地调查正在发生的事情,您需要检查您的测量方法。我首先要比较两个请求的实际时间。