在linux系统上运行批处理程序的时候,出现以下mysql连接错误
java.net.NoRouteToHostException: Cannot assign requested address
主要是因为批处理程序是多线程的,大量的数据库连接导致tcp端口耗尽。
对于Linux的客户端,通过调整几个操作系统内核参数可以解决这个问题。
net.ipv4.tcp_syncookies=1 # 开启SYN Cookies。当出现SYN等待队列溢出时,启用cookie来处理,可防范少量的SYN攻击
net.ipv4.tcp_tw_recycle=1 # 开启TCP连接中TIME-WAIT套接字的快速回收
net.ipv4.tcp_tw_reuse=1 # 开启重用。允许将TIME-WAIT套接字重新用于新的TCP连接
net.ipv4.tcp_timestamps=1 # 减少time_wait
net.ipv4.tcp_tw_timeout=3 # 收缩TIME_WAIT状态socket的回收时间窗口
主要有两种配置方式:
1,命令行
echo "1" >/proc/sys/net/ipv4/tcp_tw_reuse
echo "1" >/proc/sys/net/ipv4/tcp_tw_recycle
通过命令行配置后,如果服务器重启,配置会丢失。
2,配置文件
打开/etc/sysctl.conf,添加以下内容,
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_tw_reuse=1
然后运行sysctl -p命令使配置生效。