我试图了解我的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请求会提高性能?
答案 0 :(得分:3)
简而言之:没关系。
更长的版本:
以下是JMeter的工作原理:
那么虚拟用户的数量如何与"性能"相关联。当您为负载测试增加虚拟用户的请求数时,会影响吞吐量
吞吐量计算为请求/时间单位。时间从第一个样品的开始到最后一个样品的结束计算。这包括样本之间的任何间隔,因为它应该代表服务器上的负载。
公式为:吞吐量=(请求数)/(总时间)。
因此,如果在性能良好的系统上增加负载,则吞吐量应增加相同因子或线性增加。
当你增加负载但吞吐量没有增加时,这种情况被称为"饱和点"当您从系统获得最大性能时。进一步的负载增加将导致吞吐量下降。
参考文献:
答案 1 :(得分:0)
你怎么弄乱你的表现?根据你的“理论”,你的麻烦包括jmeter开销,这是错误的。更重要的是,这两种情况的反应是否相同?我的意思是,后端做同样的工作是否都适用于两种情况?
也许第一个请求返回不同的输出然后另一个请求。也许在其中一个请求中生成输出会更昂贵。这就是为什么你会注意到“增加”的性能,因为通常你会在X秒内完成N x重任务,而在第二种情况下G x重任务+ HX轻工作在同一时间G < N/2
- 更多请求同时?当然!增加性能?不。
因此,要完整地调查正在发生的事情,您需要检查您的测量方法。我首先要比较两个请求的实际时间。