在工作中,经常遇到无法连接问题,而产生这个问题的原因有很多种。
其中一种原因便是,本地的网络连接数达到上线了。
通常我们通过netstat 来查看服务器网络连接状况。
root@localhost [~] netstat -natp | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 10.0.1.203:42470 137.4.17.168:80 LISTEN 8361/nginx
tcp 0 0 10.0.1.203:39558 137.4.17.168:80 TIME_WAIT -
tcp 0 0 10.0.1.203:42821 137.4.17.168:80 TIME_WAIT -
tcp 0 0 10.0.1.203:38870 137.4.17.168:80 TIME_WAIT -
tcp 0 0 10.0.1.203:54631 137.4.17.168:80 ESTABLISHED 5531/ftp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 10.0.1.203:42470 137.4.17.168:80 LISTEN 8361/nginx
tcp 0 0 10.0.1.203:39558 137.4.17.168:80 TIME_WAIT -
tcp 0 0 10.0.1.203:42821 137.4.17.168:80 TIME_WAIT -
tcp 0 0 10.0.1.203:38870 137.4.17.168:80 TIME_WAIT -
tcp 0 0 10.0.1.203:54631 137.4.17.168:80 ESTABLISHED 5531/ftp
当我们运行的程序,网络请求没有很好的close释放时,就会导致大量的TIME_WAIT。
具体的修复办法是通过调整内核参数解决,编辑文件/etc/sysctl.conf,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
执行/sbin/sysctl -p,netstat参数生效。
是否开启syncookies,默认为0,表示关闭。
当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击。
连接是否允许重用,默认为0,表示关闭。
允许将TIME-WAIT sockets重新用于新的TCP连接,可以提高连接数的利用。
是否开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
系統默认的TIMEOUT时间。
1 Pingback