浅谈JMeter之常见问题Address already in use: connect
浅谈JMeter之常见问题Address already in use: connect
在JMeter高并发测试中出现“address already in use”错误,主要源于Windows系统的TCP端口资源耗尽及连接配置问题,在执行JMeter中查看结果树
原因分析
- GET请求默认采用短连接(Connection: close),每次请求均创建新TCP连接,导致TIME_WAIT状态端口堆积
- Windows默认临时端口范围仅49152-50000(约860个端口),易被短连接耗尽
- 系统默认等待TIME_WAIT端口释放时间为240秒(Windows注册表参数控制)
如何优化
1.设置线程组中的线程数为50
2.整体的线程组框架如图
3.添加的常量吞吐量定时器设置为每分钟120000,截图如下
4.在本机执行的时候,发现当执行30s以后报错上述内容,通过命令netstat -an | find /c ":8099"查看,总计58736进行了链接,然后数据就不再上升,上述的8099为被测对象的端口。
系统级优化方案
- 扩展临时端口范围通过注册表调整:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
○ 新建DWORD值 MaxUserPort = 65534(十进制)
○ 新建DWORD值 TcpTimedWaitDelay = 30(十进制,单位秒)
- 加速端口回收执行命令快速生效(需管理员权限):
netsh int ipv4 set dynamicport tcp start=10000 num=55535 netsh int ipv4 set dynamicport udp start=10000 num=55535
JMeter配置优化
- 启用连接复用机制在HTTP请求中:
○ 取消勾选"Use Keep-Alive"(强制连接池复用)
○ 添加HTTP Header Manager:Connection: keep-alive
假设我们已经做了“系统级优化方案”中的优化,我们针对JMeter的配置进行测试,我们在进行上述的测试,目前我们的JMeter结构如下:
HTTP信息头管理器中的内容如下
- 调整线程组策略
我们在Jmeter的路径下,即apache-jmeter-5.1.1\bin,找到配置文件jmeter.properties,然后找到配置项,设置为1000毫秒
httpclient4.time_to_live=1000 # 连接保活时间(毫秒)
可以通过命令进行TIME_WAIT的数据统计
netstat -ano | findstr "TIME_WAIT" | find /c "端口号"
如果各种调优还是不行的话,只能增加执行机规避问题。
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。