问题描述
我有一个简单的JMeter实验,其中有一个包含16个线程的线程组,运行500s,每个线程每2秒点击一次相同的URL,每秒生成8个请求。我正在非GUI(命令行)模式下运行。这是.jmx文件:
https://www.dropbox.com/s/l66ksukyabovghk/TestPlan_025.jmx?dl=0
这是在AWS m5ad.2xlarge / 8核/ 32GB RAM上运行的结果图(在我的PC,超大型Hetzner服务器,Neocortix Cloud Services实例上的VirtualBox Debian上,我得到相同的行为):>
https://www.dropbox.com/s/gtp6oqy0xtuybty/aws.png?dl=0
在线程组开始时,所有16个线程报告较长的响应时间(0.33s),然后逐渐恢复为正常的较短响应时间(
前两个帖子似乎相关,但是没有给出“开始运行”问题的最终原因,也没有提及“开始运行回声”问题。
Jmeter - The time taken by first iteration of http sampler is large
First HTTP Request taking a long time in JMeter
我可以通过在每个线程中用第一个HTTP请求打一个不存在的页面,获取404错误并过滤掉404错误来解决“运行开始”问题。但这是黑客,它不能解决“运行回声开始”问题,不能保证能打到不存在的页面。并且在实际目标页面的传递负载中引入了“漏洞”。
更新:根据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(600s)的值,它不会将所有“回声”推到运行结束之后。它仍然显示大约220s和440s的回声,即我试图消除的原始行为。
https://www.dropbox.com/s/if3q652iyiyu69b/hetzner_600.png?dl=0
我想知道httpclient4.time_to_live的有效最大值是否在220000(220s)左右。
谢谢, 劳埃德(Lloyd)
解决方法
由于initial connection establishment和SSL handshake
,第一个请求将很慢展望未来,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(或{{3}提供的最新稳定版本) }页),因为您可能正遭受JMeter错误的困扰,该错误已得到解决。
您可能还需要执行OS和JMeter调整,请参见JMeter Downloads以获取示例问题和解决方案