出现过多close_wait导致的tomcat假死

报错

我的预约挂号服务突然挂了,查看tomcat的端口号的时候出现,一堆的close_wait导致了我的tomcat假死,就算重启了,再看端口号也是一堆close_wait。
在这里插入图片描述

应急处理

因为是个网上预约挂号服务,不能停太久。
所以我没有查原因直接把所有占用我的端口的进程全杀了,然后重启,不管了,先恢复服务再查原因。
把占用端口的命令全杀了的命令:sudo kill -9 $(lsof -i:端口号 -t)

原因

查看最新日志catalina.out ,没有发现异常,也没有error 日志;查看localhost_access.log 也没有最新的访问日志,说明我这台tomcat 已不能提供服务了!
然后想到这个tomcat挂的时候正好内网出了问题,想到的是网络是问题
看看客户端已经断开连接,但服务器还在发送消息,讲道理服务器也应该要断开连接才对的。根据TCP的三次握手和四次挥手,这不对啊,
tomcat常用的三个状态是:
ESTABLISHED 正在通信
TIME_WAIT 主动关闭
CLOSE_WAIT 表示被动关闭。

避免再次出现该问题的方案

方案一

这个BUG很显然就是服务器端代码未能及时的释放资源所造成的,
可以通过以下途径修改Linux配置文件
vim /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 让参数生效。

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 修改系統默认的 TIMEOUT 时间

方案二

饿了,不想写了先存起来~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值