timewait过多的优化
Table of Contents
1 查看一下服务器的压力
今天在一个服务器上发现连接太多,尤其是 TIME_WAIT 状态的连接更多,这可能主要是由于增加了端口映射。 而且服务器侧是短连接造成的这种现象。 用一条命令查看一下:
[root@qzt ~]# netstat -nat | awk '{++S[$NF]} END {for(a in S) print a, S[a]}' LAST_ACK 6 LISTEN 34 SYN_RECV 12 CLOSE_WAIT 4 State 1 ESTABLISHED 60 established) 1 FIN_WAIT1 29 FIN_WAIT2 1 CLOSING 3 TIME_WAIT 101
该TIME_WAIT的默认值为2 * MSL, MSL 即max segment lifetime, 是一个tcp包的最大生存时间。
MSL值在linux上好像默认是30秒, 所以从 TIME_WAIT 状态变化到 CLOSED 大约需要60秒时间。
另外一方面,本机可用的发起连接的socket端口是有限的,可通过以下命令查看:
[root@ ~]# cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000
也即大约只有2万多个端口可用,如果处于 TIME_WIAT 状态的连接很多, 很有可能会影响本机向处发起的连接,比如ftp的主动模式就会深受影响。
出现端口不够用的情况。
2 优化方法
可以通过以下参数减少 TIME_WAIT 的连接:
- 方法一:
[root@ ~] vi /etc/sysctl.conf #开启time_wait状态的socket重用 net.ipv4.tcp_tw_reuse = 1 #开启time_wait状态的socket快速回收 net.ipv4.tcp_tw_recycle = 1 [root@ ~] /sbin/sysctl -p
- 方法二:
# 或者直接修改time_wait的等待时间 [root@ ~]echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
[root@ ~] ifconfig