前言

在性能测试中会常常遇到java.NoRouteToHostException: Can’t assign requested address (Address not available)这个问题,什么原因导致的呢?
这个原因不一定是服务器的原因,还可能是本机的问题。

一、问题报错

出现这个问题是由于liunx 分配的客户端连接端口用尽,无法建立socket连接所致,虽然socket正常关闭,但是端口不是立即释放,而是处于 TIME_WAIT 状态,默认等待60s后释放。

1、查看端口连接数量:netstat -nat | grep -i “TCP” | wc -l

2、查看linux支持的端口范围
cat /proc/sys/net/ipv4/ip_local_port_range

二、调优方案

1.扩大端口范围

修改注册表:计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
添加 MaxUserPort 十进制 65534
添加TcpTimedWaitDelay 十进制 30
重启系统

  linux,如果你的发起方是Linux

    sysctl -a |grep net.ipv4.ip_local_port_range

    net.ipv4.ip_local_port_range = 32768    60999  =====2.8w

     改端口范围: 

      ```
      sysctl -w net.ipv4.ip_local_port_range="1024 65535"
      sysctl -p
      ```

2.缩短端口占用范围—短连接

jmeter中去掉keepalive,可能还会报错,只不过延长了报错时间。不能解决问题
结果:我的未报错


总结

遇到连接被拒问题,要么修改端口范围,要么改为短连接。如果上述方法还报错,可能是目标端口出现问题了。

更多推荐

性能测试出现:java.net.NoRouteToHostException: Can‘t assign requested address (Address