JMeter并发线程数超10时不使用持久连接的原因排查
问题原因分析及解决建议
1. JMeter HTTP连接池默认配置限制
JMeter基于Apache HttpClient实现HTTP请求,默认的httpclient.maxconnections.perroute(单路由最大并发连接数)值为4。这直接导致:
- 当并发线程数≤4时,所有线程可复用这4个连接,
netstat会显示固定的4个临时端口。 - 当线程数超过4时,超出的线程无法复用已有连接池中的连接,只能新建HTTP连接;若请求完成后连接被关闭或因闲置超时被回收,就会出现临时端口持续变化的现象。
你可以在jmeter.properties配置文件中修改参数匹配你的并发需求:
# 单路由最大并发连接数,设置为不小于你的最大线程数 httpclient.maxconnections.perroute=100 # 全局最大并发连接数,按需调整 httpclient.maxconnections=200
2. 服务器端Keep-Alive策略限制
即便JMeter勾选了Use keep-alive,如果服务器端的Keep-Alive配置限制了连接存活时间或复用次数,也会主动关闭连接,迫使JMeter新建连接:
- 检查服务器响应头中的
Keep-Alive字段,比如是否包含timeout=5(连接闲置5秒后关闭)或max=10(每个连接最多处理10次请求)。 - 若服务器设置的
MaxKeepAliveRequests过小,或Keep-Alive超时时间过短,高并发场景下连接会被频繁关闭,表现为临时端口持续变化。
3. JMeter连接池回收策略影响
JMeter连接池默认会回收闲置时间超过httpclient.connection-manager.timeout(默认5秒)的连接。高并发场景下,部分连接可能因请求间隔、处理延迟等原因触发闲置超时,被连接池回收;后续线程发起请求时只能新建连接,导致端口变化。
你可以延长闲置超时时间:
httpclient.connection-manager.timeout=30000
4. Windows系统TCP端口复用限制
Windows系统中,关闭的TCP连接会进入TIME_WAIT状态(默认持续240秒),这段时间内端口无法被复用。如果高并发下连接关闭频繁,会快速耗尽可用临时端口,JMeter只能不断使用新的临时端口,表现为端口持续变化。
你可通过修改注册表调整TcpTimedWaitDelay缩短等待时间:
- 打开注册表编辑器,定位到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters - 新建DWORD值
TcpTimedWaitDelay,设置为十进制30(表示30秒) - 重启系统生效
内容的提问来源于stack exchange,提问作者Jack4Mustangs
相关产品推荐
相关产品推荐

