java - JMeter - 每个线程中的第一个样本很慢,问题每隔约 210 秒重复一次

标签 java jmeter performance-testing java-threads

我有一个简单的 JMeter 实验,其中包含 16 个线程的单个线程组,运行 500 秒,每个线程每 2 秒访问相同的 URL,每秒生成 8 个请求。我在非 GUI(命令行)模式下运行。这是 .jmx 文件:

https://www.dropbox.com/s/l66ksukyabovghk/TestPlan_025.jmx?dl=0

这是在 AWS m5ad.2xlarge/8 核/32GB RAM 上运行的结果图(我在我的 PC 上的 VirtualBox Debian 上得到了相同的行为,非常大的 Hetzner 服务器,Neocortix 云服务实例):

https://www.dropbox.com/s/gtp6oqy0xtuybty/aws.png?dl=0

在线程组的开始,所有 16 个线程都报告了较长的响应时间 (0.33s),然后进入正常的较短响应时间 (<0.1s)。我称之为“运行开始”问题。 然后大约 220 秒后,又出现了一次 16 长响应时间的爆发,又一次爆发出现在大约 440 秒。我称这些为“运行开始回声”问题,因为它们看起来像是“运行开始”问题的回声。如果我引入另一个延迟的线程组,比如 60 秒,也会出现同样的问题。该线程组在 t=60 秒时出现了自己的“运行开始”问题,然后在 280 秒和 500 秒时出现了自己的回声。

这两个先前的帖子似乎相关,但没有给出“Start of Run”问题的决定性原因,也没有提到“Start of Run Echo”问题。

Jmeter - The time taken by first iteration of http sampler is large

First HTTP Request taking a long time in JMeter

我可以解决“运行开始”问题,方法是在每个线程中使用第一个 HTTP 请求访问一个不存在的页面,得到 404 错误,然后过滤掉 404。但这是一个 hack,它并没有解决“Start of Run Echo”问题,它不能保证命中不存在的页面。并且它在传递到真实目标页面的负载中引入了“漏洞”。

更新:根据 Dmitri T 的建议,我安装了 JMeter 5.3。它有默认值 httpclient4.time_to_live=60000 (60s),它的输出匹配:

https://www.dropbox.com/s/gfcqhlfq2h5asnz/hetzner_60.png?dl=0

但是,如果我增加 httpclient4.time_to_live=600000(600 秒)的值,它不会在运行结束后推出所有“回声”。它仍然显示大约 220 秒和 440 秒的回声,即我试图消除的相同原始行为。

https://www.dropbox.com/s/if3q652iyiyu69b/hetzner_600.png?dl=0

我想知道 httpclient4.time_to_live 的有效最大值是否为 220000(220 秒)左右。

谢谢, 劳埃德

最佳答案

由于 initial connection establishment,第一个请求会很慢和 SSL handshake

future JMeter 将根据其 network properties 行事。特别是:

  • httpclient4.time_to_live - TTL(以毫秒为单位)代表一个绝对值。无论如何,连接都不会在其 TTL 之后被重新使用。
  • httpclient.reset_state_on_thread_group_iteration - 在开始新的线程组迭代时重置 HTTP 状态,这意味着关闭打开的连接并重置 SSL 状态

另外,您似乎使用的是一种已经有 5 年历史的过时 JMeter 版本,according to JMeter Best Practices you should always be using the latest version of JMeter所以考虑升级到JMeter 5.3 (或任何可从 JMeter Downloads 页面获得的最新稳定版本),因为您可能遇到已解决的 JMeter 错误。

也可能是您需要执行操作系统和 JMeter 调整的情况,请参阅 Concurrent, High Throughput Performance Testing with JMeter例如问题和解决方案

关于java - JMeter - 每个线程中的第一个样本很慢,问题每隔约 210 秒重复一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63914359/

相关文章:

certificate - 未生成ApacheJMeterTemporaryRootCA.crt

java - 100 个用户工作正常,对于 200 个,它给出 "javax.net.ssl.SSLHandshakeException"错误和 "Remote host closed connection during handshake"消息

gpu - 替代 nvidia-smi 来测量 GPU 利用率?

performance - 在没有交互选项的情况下运行 Gatling

java - 如何使用 Selenium 和 Java 识别元素

java - Spring Boot中如何获取系统属性值

performance - 如何在Jmeter中更改http请求名称

jmeter - 负载测试专业人​​员可以通过哪些测量来评估特定负载下每个请求的性能?

java - 将数组作为单独的参数传递

java - 如何使用相机获取一个物体到另一个物体的距离?