记一次大量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当探测没有确认时,重新发送探测的频度。缺省是75秒。

/proc/sys/net/ipv4/tcp_keepalive_probes在认定连接失效之前,发送多少个TCP的keepalive探测包。缺省值是9。这个值乘以tcp_keepalive_intvl之后决定了,一个连接发送了keepalive之后可以有多少时间没有回应。

三.了解扩展

1.客户端先发送FIN,进入FIN_WAIT1状态

服务端收到FIN,发送ACK,进入CLOSE_WAIT状态,客户端收到这个ACK,进入FIN_WAIT2状态

服务端发送FIN,进入LAST_ACK状态

客户端收到FIN,发送ACK,进入TIME_WAIT状态,服务端收到ACK,进入CLOSE状态

客户端TIME_WAIT持续2倍MSL时长,在linux体系中大概是60s,转换成CLOSE状态

2.服务端使用的短链接,每次客户端请求后,服务端都会主动发送FIN关闭连接.最后进入到time_wait状态.对于访问量大的web server,会存在大量的TIME_WAIT状态.让服务器能够快速回收和重用那些TIME_WAIT的资源,可修改内核参数.

修改/etc/sysctl.conf如下:

#对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃,不应该大于255,默认值是5,对应于180秒左右时间

net.ipv4.tcp_syn_retries=2

#表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为300秒

net.ipv4.tcp_keepalive_time=1200

net.ipv4.tcp_orphan_retries=3

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

net.ipv4.tcp_fin_timeout=30

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

net.ipv4.tcp_max_syn_backlog = 4096

#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN***,默认为0,表示关闭

net.ipv4.tcp_syncookies = 1

#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭

net.ipv4.tcp_tw_reuse = 1

#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭

net.ipv4.tcp_tw_recycle = 1

##减少超时前的探测次数

net.ipv4.tcp_keepalive_probes=5

##优化网络设备接收队列

net.core.netdev_max_backlog=3000

修改完之后执行/sbin/sysctl -p让参数生效。

linuxboy的RSS地址:https://www.linuxboy.net/rssFeed.aspx

本文永久更新链接地址:https://www.linuxboy.net/Linux/2019-08/160357.htm

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

  1. android linux网络连接,Android和Linux服务器之间的TCP连接

    我正在编写一个代码,需要每秒从Android移动设备向台式计算机(linux服务器)发送数据.由于数据经常发送,通过Http命中无法实现(因为会消耗时间),所以Tcp通信似乎是更好的选择,因为andr ...

  2. linux mongo 服务器,如何用MongoDB在Linux服务器上创建大量连接和线程的记忆

    最近,我们想对MongoDB在大量连接中的行为进行基准测试.这使我不得不重新讨论该主题,并刷新关于如何在Linux服务器上创建大量连接和线程的记忆.在此过程中,我发现了一些没有使用过的新可调参数. M ...

  3. linux服务器如何访问,如何连接一个Linux服务器

    如何连接一个Linux服务器 本文中提到的Linux服务器,是一台安装Ubuntu系统的工作站. Linux服务器端准备工作 首先需要在Linux服务器上安装openssh-server,打开Linu ...

  4. linux测试tcp长连接工具,Linux(服务器编程):44---TCP长连接、短连接(心跳检测)

    一.TCP连接的相关说明 ①使用TCP协议时,会在客户端和服务器之间建立一条虚拟的信道,这条虚拟信道就是指连接,而建议这条连接需要3次握手,拆毁这条连接需要4次挥手,可见,我们建立这条连接是有成本的, ...

  5. 苹果手机vnc进linux的服务器,linux服务器vnc远程连接,怎么使用linux服务器进行vnc远程连接?...

    现在市面上的vnc远程控制软件其实不多,好用的也特别少,小编因为工作原因使用这个vnc远程控制软件的还比较多,但是因为系统的原因也碰过很多壁.找了很久的vnc连接linux系统的,因为有的软件只支持w ...

  6. 【我Linux服务器被ddos了】记一次ddos防御+溯源+反击

    相信大家都听过DDOS攻击.DDOS攻击,那 "DDOS攻击" 到底是什么呢? 一.什么是DDOS攻击?(知道的小伙伴可以跳过这一条↓↓) 站长也不跟大家扯百度百科上面的这一套,都 ...

  7. Linux服务器中Ebury Trojan病毒记

    查看原文:http://www.sijitao.net/1681.html 上月,博主租用的vps主机商发给我一封邮件,内容大致说我的服务器中了Ebury Trojan病毒.这个可以说是我使用linu ...

  8. Navicat连接Linux服务器的mysql出现连接不上的问题

    1.使用常规连接 一般需要改下服务器上mysql的权限,首先登陆mysql,执行下面的命令 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED B ...

  9. Linux服务器如何实现Rdesktop连接?

    用的是小鸟云服务器,操作步骤具体如下: 1.安装rdesktop. 运行 rdesktop 命令检查系统是否已经安装,若未安装则请 转到 github 下载最新安装包 >> 或 单击以下链 ...

最新文章

  1. 【通知】《深度学习之模型设计》第三次重印,欢迎读者支持!
  2. less 函数_Python中的函数式编程教程,学会用一行代码搞定所有内容
  3. 11.InfluxDB引擎原理
  4. Nvelocity 模板引擎 实例
  5. 一步一步写算法(之洗牌算法)
  6. java指令和javac指令总结
  7. emacs org-mode 常用命令
  8. CTF---Web入门第二题 上传绕过
  9. 电脑中的打印驱动程序如何打包_旧驱动程序会教您如何处理笔记本电脑上的黑屏...
  10. 数据结构殷人昆电子版百度云资源_数据结构精讲与习题详解
  11. golang学习之远程木马demo编写
  12. 计算机桌面移至其它盘,win7系统电脑桌面文件转移到其他盘的操作方法
  13. 80004005错误代码_0x80004005,手把手教你解决0x80004005错误代码的方法
  14. m-TRP transmission for URLLC(draft)
  15. 吐血推荐珍藏的Visual Studio Code插件
  16. java 护眼背景,设置Eclipse配色方案--设置不同背景色,有效护眼
  17. PTA数据结构第二章线性表
  18. 笨方法学Python笔记(6)
  19. saber 2.7.1 maven 配置
  20. xzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

热门文章

  1. decimal.js--使用/实例
  2. 对韦东山老师移植最新uboot的总结
  3. 智邦国际ERP系统好不好?
  4. MT6169+MT6158设计资料参考指南
  5. matlab进行相位展开,相位展开(phase unwrapping)算法研究与实践
  6. XCode_LLDB_调试锦集
  7. bromine test
  8. 【突破二次元壁】手把手教你用AnimeGAN将风景图转换成宫崎骏动漫风
  9. Widows下RTSP测试服务器搭建
  10. Microsoft onenote 2003 下载