Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance JMeter:更多的HTTP请求会提高性能吗?_Performance_Jmeter - Fatal编程技术网

Performance JMeter:更多的HTTP请求会提高性能吗?

Performance JMeter:更多的HTTP请求会提高性能吗?,performance,jmeter,Performance,Jmeter,我试图理解Jmeter测试中的性能显著提高 在多租户数据库环境中,我有一个单一的RESTful服务测试,其中包含一个线程组和一个发布XML负载的HTTP请求采样器。然后通过存储过程评估XML有效负载,并收到一个响应,说明声明是否合格。我在Apache7环境中从一个.bat文件(非gui模式)运行此测试,并运行一个JVM 测试线程组属性 # of Threads: ${__P(test.threads,200)} Ramp-Up Period: ${__P(test.rampup,1)} Loop

我试图理解Jmeter测试中的性能显著提高

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

测试线程组属性

# 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,让负载平衡器执行优化,我会期望增加,但事实并非如此。(仍然只使用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请求会提高性能?

您如何衡量性能?根据您的“理论”,您的测量包括jmeter开销,这是错误的。此外,这两种情况的反应是否相同?我的意思是,后端在这两种情况下都做相同的工作吗

可能第一个请求返回的输出与另一个不同。可能在一个请求中生成输出的成本更高。这就是为什么您会注意到性能“提高”的原因,通常您会在x秒内完成N x重任务,而在第二种情况下,G x重任务+H x轻任务同时执行,其中
G
-同时执行更多请求?当然性能提高?没有

因此,为了全面调查正在发生的事情,您需要回顾您的测量方法。我首先比较两个请求的实际时间。

简而言之:没关系

较长版本:

以下是JMeter的工作原理:

  • JMeter在爬升期间启动所有线程
  • 每个线程开始颠倒执行采样器(或根据
  • 当请求没有更多的采样器要执行,也没有更多的循环要迭代时,它将被关闭
  • 那个么,虚拟用户的数量和“性能”有什么关系呢。当您增加负载测试的虚拟用户请求数时,它会影响吞吐量

    Method: POST
    https://serverName:port/database/.../${__P(tenant,1111)}/Claim/${__property(contractId)}
    
    吞吐量按请求/时间单位计算。计算从第一个样本开始到最后一个样本结束的时间。这包括样本之间的任何间隔,因为它应该表示服务器上的负载

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

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

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

    参考资料:


    您如何衡量自己的表现?根据您的“理论”,您的测量包括jmeter开销,这是错误的。那么,为什么jmeter不希望在不考虑采样器和控制器的情况下始终达到最大饱和?如果我在TG中添加一个统一的随机计时器,这将如何影响吞吐量?不考虑计时器(以及前置/后置处理器),因此吞吐量不会改变。如果您想通过计时器控制吞吐量,请将采样器放在下面,并在“生成父样本”和“包括…的持续时间”框中打勾