linux 下Time_wait过多问题解决
1、通过netstat-anp|grepTIME_WAIT|wc-l命令查看TIME_WAIT数量
2、TIME_WAIT产生的原因,可能是因为服务器主动关闭连接导致TIME_WAIT产生
3、、查找TIME_WAIT解决方案:
发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
vi/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
然后执行/sbin/sysctl-p让参数生效。
关键命令:
1、netstat-n|awk'/^tcp/{++state[$NF]}END{for(keyinstate)printkey,"\t",state[key]}'
会得到类似下面的结果,具体数字会有所不同:
LAST_ACK1
SYN_RECV14
ESTABLISHED79
FIN_WAIT128
FIN_WAIT23
CLOSING5
TIME_WAIT1669
状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉
2、sysctl-a|greptime|grepwait
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120