浅谈JMeter之常见问题Address already in use: connect

浅谈JMeter之常见问题Address already in use: connect

在JMeter高并发测试中出现"address already in use"错误,主要源于Windows系统的TCP端口资源耗尽及连接配置问题,在执行JMeter中查看结果树

原因分析

  1. GET请求默认采用短连接(Connection: close),每次请求均创建新TCP连接,导致TIME_WAIT状态端口堆积
  2. Windows默认临时端口范围仅49152-50000(约860个端口),易被短连接耗尽
  3. 系统默认等待TIME_WAIT端口释放时间为240秒(Windows注册表参数控制)
    如何优化
    1.设置线程组中的线程数为50

    2.整体的线程组框架如图

    3.添加的常量吞吐量定时器设置为每分钟120000,截图如下

    4.在本机执行的时候,发现当执行30s以后报错上述内容,通过命令netstat -an | find /c ":8099"查看,总计58736进行了链接,然后数据就不再上升,上述的8099为被测对象的端口。

系统级优化方案

  1. 扩展临时端口范围通过注册表调整:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
    ○ 新建DWORD值 MaxUserPort = 65534(十进制)
    ○ 新建DWORD值 TcpTimedWaitDelay = 30(十进制,单位秒)
  2. 加速端口回收执行命令快速生效(需管理员权限):
bash 复制代码
netsh int ipv4 set dynamicport tcp start=10000 num=55535
netsh int ipv4 set dynamicport udp start=10000 num=55535

JMeter配置优化

  1. 启用连接复用机制在HTTP请求中:
    ○ 取消勾选"Use Keep-Alive"(强制连接池复用)
    ○ 添加HTTP Header Manager:Connection: keep-alive
    假设我们已经做了"系统级优化方案"中的优化,我们针对JMeter的配置进行测试,我们在进行上述的测试,目前我们的JMeter结构如下:

    HTTP信息头管理器中的内容如下
  2. 调整线程组策略
    我们在Jmeter的路径下,即apache-jmeter-5.1.1\bin,找到配置文件jmeter.properties,然后找到配置项,设置为1000毫秒
properties 复制代码
httpclient4.time_to_live=1000  # 连接保活时间(毫秒)

可以通过命令进行TIME_WAIT的数据统计

properties 复制代码
netstat -ano | findstr "TIME_WAIT" | find /c "端口号"

如果各种调优还是不行的话,只能增加执行机规避问题。

相关推荐
BatyTao2 天前
第十三章 Ant与Jenkins的集成
jmeter·jenkins·ant
天才测试猿2 天前
Jmeter接口测试:jmeter组件&元件介绍,利用取样器中http发送请求
自动化测试·软件测试·网络协议·测试工具·jmeter·http·接口测试
新知图书3 天前
JMeter的定时器
java·jvm·jmeter
测试架构师北凡3 天前
接口测试流程+jmeter并发+面试题(总结)
自动化测试·软件测试·功能测试·软件测试工程师·jmeter·接口测试·jmeter接口测试
文人sec3 天前
性能测试-jmeter12-万能插件包管理器jmeter-plugins
测试工具·jmeter·性能优化·模块测试
文人sec3 天前
性能测试-jmeter13-性能资源指标监控
数据库·测试工具·jmeter·性能优化·模块测试
2501_915918413 天前
Charles与Postman、JMeter结合使用教程:高效接口调试与性能测试方案
测试工具·jmeter·ios·小程序·uni-app·postman·webview
文人sec12 天前
性能测试-jmeter9-逻辑控制器、定时器压力并发
测试工具·jmeter·性能优化·模块测试
CesareCheung13 天前
JMeter分布式压力测试
分布式·jmeter·压力测试
测试界清流13 天前
jmeter使用技巧
jmeter