Linux服务器大量的CLOSE-WAIT产生的原因和处理方法
Linux服务器大量的CLOSE-WAIT产生的原因和处理方法
独钓渔 发表于1个月前
Linux服务器大量的CLOSE-WAIT产生的原因和处理方法
  • 发表于 1个月前
  • 阅读 49
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

 

close_wait状态出现的原因是被动关闭方未关闭socket造成

当客户端因为某种原因先于服务端发出了FIN信号,就会导致服务端被动关闭,若服务端不主动关闭socket发FIN给Client,此时服务端Socket会处于CLOSE_WAIT状态(而不是LAST_ACK状态)。通常来说,一个CLOSE_WAIT会维持至少2个小时的时间(系统默认超时时间的是7200秒,也就是2小时)。如果服务端程序因某个原因导致系统造成一堆CLOSE_WAIT消耗资源,那么通常是等不到释放那一刻,系统就已崩溃。

 

先来介绍tcp keepalive的三个参数:

vi /etc/sysctl.conf 
tcp_keepalive_time    
tcp_keepalive_intvl     
tcp_keepalive_probes     

默认tcp_keepalive_time的值为7200    ,超时时间(开启keepalive的闲置时长);
默认tcp_keepalive_intvl的值为75     ,tcp检查间隔时间(keepalive探测包的发送间隔);
默认tcp_keepalive_probes的值为9     ,tcp检查次数(如果对方不予应答,探测包的发送次数);

cat /proc/sys/net/ipv4/tcp_keepalive_time
cat /proc/sys/net/ipv4/tcp_keepalive_intvl
cat /proc/sys/net/ipv4/tcp_keepalive_probes

所以要根据自身的业务来调整这三个参数:
 
三种方式: 

1:

vim /etc/sysctl.conf
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
sysctl -p

2:

echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl
echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes

3:

sysctl -w net.ipv4.tcp_keepalive_time=600   
sysctl -w net.ipv4.tcp_keepalive_probes=2 
sysctl -w net.ipv4.tcp_keepalive_intvl=2

 

 

 

共有 人打赏支持
粉丝 43
博文 340
码字总数 122683
×
独钓渔
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: