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的快速回收)