最近跑tomcat的任务调用,发现第二天又tomcat的报错出现:
大致意思是连接到目标主机的时候无法分配请求,原来是TCP端口用光了
2016-01-22 02:01:59:INFO Thread-103 org.apache.http.impl.client.DefaultHttpClient - I/O exception (java.net.NoRouteToHostException) caught when connecting to the target host: Cannot assign requested address
java.net.NoRouteToHostException: Cannot assign requested address2016-01-22 02:01:59:INFO Thread-105 org.apache.http.impl.client.DefaultHttpClient - I/O exception (java.net.NoRouteToHostException) caught when connecting to the target host: Cannot assign requested address
看看端口范围:
cat /proc/sys/net/ipv4/ip_local_port_range
1024 65000
解决方案:
vim /etc/sysctl.conf,编辑完成后 sysctl -p 使其生效
1、net.ipv4.tcp_tw_reuse = 1
表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;修改为1,释放TIME_WAIT端口给新连接使用
2、net.ipv4.tcp_fin_timeout = 15
表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。默认为60秒
3、net.ipv4.tcp_tw_recycle = 1
表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。