TIME_WAIT连接过多解决办法

问题起因:

自己开发了一个服务器和客户端,通过短连接的方式来进行通讯,由于过于频繁的创建连接,导致系统连接数量被占用,不能及时释放。看了一下18888,当时吓到了。

现象:

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

时间: 2024-10-06 01:10:09

TIME_WAIT连接过多解决办法的相关文章

大量TIME_WAIT连接的解决办法

1.使用keep alive连接(待补充) 2.修改tcp参数 根据TCP协议的连接断开规定,发起socket主动关闭的一方,socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒,TIME_WAIT状态下的socket不能被回收使用.具体现象是对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的socket, 甚至

MySQL的TIME_WAIT连接过多的解决方法

今天上MySQL服务器看了下并发,发现了以下情况 MySQL的TIME_WAIT连接过多,吓了我一跳,因为这个服务器我很少去管理,今天突然想上来看看,发现了这个问题.以下是我的解决方法 [[email protected] data]# ss -an | grep 3306 | wc -l 1402[[email protected] data]#mysql -uroot -p mysql> show variables like "time_timeout"; | wait_t

mstsc 终端服务器超出了最大允许连接的解决办法

终端服务器超出了最大允许连接的解决办法 win7系统:运行,输入mstsc /v xxx.xxx.xxx.xxx /admin win2003系统:运行,输入mstsc /v xxx.xxx.xxx.xxx /console 解决远程pc的回话满了后,无法登录问题

使用android真机测试http网络连接异常解决办法

最近在学校android网络编程之json解析时遇到不少问题,其中之一是在使用http协议连接网络时总是出错,捣鼓了将近两天,终于略有所悟,现记录如下. 一 .问题描述 首先我是在本地tomcat服务器上部署一个web项目,通过web项目的servlet完成对客户端连接请求的操作.其他都很顺利,在电脑浏览器上输入URL访问正常,在eclipse上创建Java项目也能正常访问.但是一旦放在android项目中,就出现错误了,抛出异常信息为:failed to connect to localhos

x64 release模式下mysql编译连接错误解决办法

系统:win8 64位 MySQL 5.7 32 原来项目是debug 32位编译的 后来改成release 64位  结果编译没错 连接时候错误  无法解决 的外部符号之类的 解决办法: 1  下载x64位的dll ,lib文件 下载链接:点击打开链接 2  将libmysql64.lib以及libmysql64.dll拷贝到数据库安装目录下面,也就是原来libmysql.lib同级目录下面 3 我的程序里面lib是这样导进去的.所以我在这里改成了libmysql64.lib #pragma

KVM使用virsh console无法连接的解决办法(转)

一.问题描述: KVM中宿主机通过console无法连接客户机,卡在这里不动. # virsh console vm01 Connected to domain vm01 Escape character is ^] 二.解决办法: 利用vnc或宿主机的桌面进入客户机vm01中添加参数 1.添加ttyS0的安全许可,允许root登录: # echo "ttyS0" >> /etc/securetty 2.在/etc/grub.conf文件中为内核添加参数: console=

LNK2005 连接错误解决办法

nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" ([email protected]@Z) 已经在 LIBCMTD.lib(new.obj) 中定义nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" ([email protected]@Z

启动Mongo之由于目标计算机积极拒绝,无法连接--mongoDB连接错误解决办法

首先,先来张图,看看亲们有没有一样的连接问题.我是遇到过两次,觉得有必要记录下来.已备将来查看. 分析原因:这是启动shell编辑器的时候出现的问题,我分析他可能是服务器连接的问题. 解决方法:在mongo安装文件中,创建一个mongo.config文件,内容如下: 如果每次启动mongo,都从cmd启动,那将是一件很麻烦的事情.使用批处理文件启动会比较方便. 首先明白顺序,先启动mongod应用程序.然后运行刚刚建立的config文件.最后运行mongo.exe文件 这样可以创建两个个bat文

mysql 远程连接超时解决办法

设置mysql远程连接root权限 在远程连接mysql的时候应该都碰到过,root用户无法远程连接mysql,只可以本地连,对外拒绝连接. 需要建立一个允许远程登录的数据库帐户,这样才可以进行在远程操作数据库. 方法如下: 默认情况下MYSQL数据库的系统数据库mysql系统表user内用户权限只提供localhost本机登陆: 需要更改权限才能实现远程连接MYSQL数据库. 可以通过以下方式来确认: root#mysql -h localhost -uroot -p Enter passwo