linux服务器出现大量TIME_WAIT问题解决方法

现象:

1、外部机器不能正常连接SSH

2、内向外不能够正常的ping通过,域名也不能正常解析。

问题排查:

通过 netstat  -anp | grep TIME_WAIT | wc -l 命令查看数量,发现TIME_WAIT的连接数量超过了18000太夸张了。

1、初步怀疑是程序没有关闭连接,codereview了两遍,发现,已经正常关闭。

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 让参数生效。

 

经过配置后,暂时的问题是解决了,再查看TIME_WAIT数量快速下降。

 

关键命令:

 

1、netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}'

会得到类似下面的结果,具体数字会有所不同:

LAST_ACK 1
SYN_RECV 14
ESTABLISHED 79
FIN_WAIT1 28
FIN_WAIT2 3
CLOSING 5
TIME_WAIT 1669

状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

2、sysctl -a | grep time | grep wait
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

 

 

字段说明:

  net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

  net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

  net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

  net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

  net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。

  net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。

  net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。 

  net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

时间: 2024-10-25 10:28:18

linux服务器出现大量TIME_WAIT问题解决方法的相关文章

Linux服务器安全事件应急响应排查方法总结

  Linux是服务器操作系统中最常用的操作系统,因为其拥有高性能.高扩展性.高安全性,受到了越来越多的运维人员追捧.但是针对Linux服务器操作系统的安全事件也非常多的.攻击方式主要是弱口令攻击.远程溢出攻击及其他应用漏洞攻击等.我的VPS在前几天就遭受了一次被恶意利用扫描其他主机SSH弱口令安全问题.以下是我针对此次攻击事件,结合工作中Linux安全事件分析处理办法,总结Linux安全应急响应过程中的分析方法.   一.分析原则   1.重要数据先备份再分析,尽量不要在原来的系统中分析;  

tcp短连接TIME_WAIT问题解决方法大全(1)——高屋建瓴

tcp连接是网络编程中最基础的概念,基于不同的使用场景,我们一般区分为"长连接"和"短连接",长短连接的优点和缺点这里就不详细展开了,有心的同学直接去google查询,本文主要关注如何解决tcp短连接的TIME_WAIT问题. 短连接最大的优点是方便,特别是脚本语言,由于执行完毕后脚本语言的进程就结束了,基本上都是用短连接.但短连接最大的缺点是将占用大量的系统资源,例如:本地端口.socket句柄.导致这个问题的原因其实很简单:tcp协议层并没有长短连接的概念,因此

tcp短连接TIME_WAIT问题解决方法大全(3)——tcp_tw_recycle

[tcp_tw_recycle和tcp_timestamps]参考官方文档(http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt),tcp_tw_recycle解释如下:tcp_tw_recycle选项作用为:Enable fast recycling TIME-WAIT sockets. Default value is 0.tcp_timestamps选项作用为:Enable timestamps as define

Linux服务器磁盘占满问题解决

  今天下班某电商技术部leader发现个问题,说他们服务器硬盘满了.把日志文件都删掉了,可硬盘空间依旧满.于是df -h查看了下各个挂载点的状况(如下图). /dev/sda3占用了100%,那么我们du -s -h ./*看下目录的占用情况(如下图). linux磁盘挂载点目录占用情况(图) 挂载点下的目录之和远小于4.5G,那么是什么占用了硬盘呢? 以下为该问题的解答: 在apache/tomcat服务在运行状态下,清空了运行服务的日志,从而导致了/dev/sda3 满了的问题.一般情况下

tcp短连接TIME_WAIT问题解决方法大全(2)——SO_LINGER

SO_LINGER是一个socket选项,通过setsockopt API进行设置,使用起来比较简单,但其实现机制比较复杂,且字面意思上比较难理解. 解释最清楚的当属<Unix网络编程卷1>中的说明(7.5章节),这里简单摘录: SO_LINGER的值用如下数据结构表示: struct linger {      int l_onoff; /* 0 = off, nozero = on */      int l_linger; /* linger time */ }; 其取值和处理如下:1.

Linux服务器磁盘占满问题解决(/dev/sda3 满了)

今天下班某电商技术部leader发现个问题,说他们服务器硬盘满了.把日志文件都删掉了,可硬盘空间依旧满.于是df -h查看了下各个挂载点的状况(如下图). /dev/sda3占用了100%,那么我们du -s -h ./*看下目录的占用情况(如下图). linux磁盘挂载点目录占用情况(图) 挂载点下的目录之和远小于4.5G,那么是什么占用了硬盘呢? 以下为该问题的解答: 在apache/tomcat服务在运行状态下,清空了运行服务的日志,从而导致了/dev/sda3 满了的问题.一般情况下,大

tcp短连接TIME_WAIT问题解决方法大全(5)——tcp_max_tw_buckets

参考官方文档(http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt),解释如下:tcp_max_tw_buckets - INTEGERMaximal number of timewait sockets held by system simultaneously.If this number is exceeded time-wait socket is immediately destroyedand warning

tcp短连接TIME_WAIT问题解决方法大全(4)——tcp_tw_reuse

tcp_tw_reuse选项的含义如下(http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt):tcp_tw_reuse - BOOLEANAllow to reuse TIME-WAIT sockets for new connections when it issafe from protocol viewpoint. Default value is 0.    这里的关键在于"协议什么情况下认为是安全的"

linux下修改MAC地址问题解决方法_Linux

在linux中,修改MAC地址 # ifdown eth0 # ifconfig eth0 hw ether 12:34:56:78:90:12 (修改的MAC地址跟原来的地址不同) # ifup eth0 (修改成功) 后,用# ifconfig 查看,MAC地址改变了,但之后输入#service network restart 或ifdowneth0命令时,会出现如下错语信息: Device eth0 has MAC address 12:34:56:78:90:12, instead of