jmeter压力测试报错:java.net.BindException: Address already in use: connect解决方案

1.压测初期在压测某一接口时,2分钟后jmeter报错如下:

  • java.net.BindException: Address already in use: connect

2.查询信息得知压力测试过程中本地TCP/IP被占满,故对本地配置进行修改;

3.修改windows本地配置信息:

3.1 设置MaxUserPort数量

  • (1)使用win+R打开cmd,输入regedit命令打开注册表
  • (2)找到在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters右键Parameters;
  • (3)添加一个新的DWORD,名字为MaxUserPort;
  • (4)然后双击MaxUserPort,输入数值数据为65534,基数选择十进制;(如果是分布式运行的话,控制机器和负载机器都需要这样的操作)

3.2 深入研究提高端口的使用效率:

  • windows下的端口Time_wait&close_wait导致端口无法使用
3.2.1Time_Wait解决方案:设置TcpTimeWaitDelay参数:
  • (1)重复以上步骤1,2
  • (2)添加一个新的DWORD,名字为TcpTimeWaitDelay,将值设置为30,缩短TIME_WAIT等待时;
  • 注:只设置MaxUserPort,TcpTimedWaitDelay 直接压测仍然会导致同一报错,那怕将TcpTimedWaitDelay 设置最大300也会出现端口占用的问题
3.2.2Close_Wait解决方案:
  • Close_wait会占用一个连接,网络可用连接小。当数量过多时,可能会引起网络性能下降,并占用到系统非换页内存,尤其时在有连接池的情况下(比如Httprequest),会耗尽连接池的网络连接数,导致无法建立网络连接。
  • 设置Keepalive参数:
    • (1)使用win+R打开cmd,输入regedit命令打开注册表
    • (2)找到在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters右键Parameters;
    • (3)“KeepAliveTime” = DWORD:006ddd00
    • (4)“KeepAliveInterval” = DWORD:000003e8
    • (5)“MaxDataRetries” = “5”

3.3 配置TcpNumConnections参数

	+ (1)TcpNumConnections= 16777214
	+ (2)MaxHashTableSize = 65536
	+ (3)MaxFreeTcbs = 16000

3.4 以上设置完毕后重启本地计算机!

4.因本次压测为接口涉及到Nginx反向代理服务器,故需要对NG服务器做如下参数改动:

  • 4.1 web服务器的最大连接线程数,调到1024或者2048,后期直接调整至65535(官方默认最大参数设置)
  • 4.2 修改内核服务器参数:
    目的:加快被占用端口的释放速度
    #vi /etc/sysctl.conf
    • net.ipv4.tcp_tw_reuse = 1 (减少等待时间)
    • net.ipv4.tcp_tw_recycle = 1 (开启TCP连接中TIME-WAIT sockets的快速回收)

5.修改以上参数后重新压测java.net.BindException: Address already in use: connect报错未发生。

你可能感兴趣的:(性能测试)