java.net.NoRouteToHostException: Cannot assign requested address

使用jmeter进行压测时,当线程数大了过后会出现Cannot assign requested address的问题。

该问题是压测机客户端的问题,跟应用服务没关系。

问题:

错误原因: 由于liunx 分配的客户端连接端口用尽,无法建立socket连接所致,每一个socket都会占用一个端口,虽然socket正常关闭,但是端口不是立即释放,而是处于 TIME_WAIT 状态,默认等待60s后释放。

查看liunx支持的客户端连接端口范围,也就是 28232 个端口。cat /proc/sys/net/ipv4/ip_local_port_range

32768 - 61000

解决方法:

1. 调低端口释放后的等待时间,默认为60s,修改为15~30s。echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

2. 修改 tcp/ip 协议配置,通过配置/proc/sys/net/ipv4/tcp_tw_reuse,默认为0,修改为1,释放TIME_WAIT端口给新连接使用。echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse

3. 修改 ctp/ip 协议配置,快速回收socket资源,默认为0.修改为1。echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle

4.增加可用端口  vim /etc/sysctl.conf 

net.ipv4.ip_local_port_range = 10000     65000      -----意味着10000~65000端口可用 

改完后,执行命令“sysctl -p”使参数生效,不需要reboot。


netstat -ant | grep 3306  查看3306端口有被哪些ip:port连接。或者使用netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'查看所有的tcp和udp连接状况;

服务端和客户端都要修改以上几个配置

你可能感兴趣的:(java.net.NoRouteToHostException: Cannot assign requested address)