linux服务器突然有大量连接,记一次大量CLOSE_WAIT的解决方案

当Linux服务器出现大量CLOSE_WAIT状态的连接时,可能导致服务无法连接MQ。这通常是由于应用未正确处理socket关闭导致的。解决方案包括分析CLOSE_WAIT的原因、调整系统参数如tcp_keepalive_time等,以及优化TIME_WAIT状态的资源回收。通过修改sysctl.conf并重启服务,可以有效解决此问题。
摘要由CSDN通过智能技术生成

记一次大量CLOSE_WAIT的解决方案

问题:

Cannot send, channel has already failed: tcp://ip:61616

Javax.jms.JMSException: Cannot send, channel has already failed: tcp://ip:61616

应用连不上mq

解决方案:

一,分析思路:

1.现象:通过netstat 查看与61616相关的连接状况,发现130多个CLOSE_WAIT

2.是什么原因造成这么多的CLOSE_WAIT?

2.1 主要原因是某种情况下应用关闭了socket连接,但是mq忙于读或者写,没有关闭连接.

2.2 代码需要判断socket,一旦读到0,断开连接,read返回负,检查一下errno,如果不是AGAIN,就断开连接。

3.造成CLOSE_WAIT之后服务为啥连不上mq呢?

linux分配给一个用户的文件句柄是有限的,CLOSE_WAIT状态一直被保持,意味着对应数目的通道就一直被占着,一旦达到句柄数上线,新的请求就无法被处理了,应用程序可能会返回大量的Too many openfiles异常.

4.什么是CLOSE_WAIT?

4.1 mq为被连接端,java服务为主动方,在被动关闭情况下,mq已经接收到FIN,但是还没有发送自己的FIN的时刻,连接处于CLOSE_WAIT状态;

二,解决办法:

1.重启mq

2,linux下设置如下三个参数:

/proc/sys/net/ipv4/tcp_keepalive_time当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时。

/proc/sys/net/ipv4/tcp_keepalive_intvl当探测没有确认时&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值