问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

一次Netty 代码不健壮导致的大量 CLOSE_WAIT 连接原因分析

发布网友 发布时间:2024-10-19 18:09

我来回答

1个回答

热心网友 时间:2024-11-30 10:51

我们线上存在一个 Dubbo 服务,遇到大量 CLOSE_WAIT 状态的连接,始终无法消失,因此进行了原因分析。


CLOSE_WAIT 状态出现在被动关闭方,收到对端 FIN 包后回复 ACK,但未发送 FIN 包之前。问题在于服务没有回复 FIN,原因可能是收到了 FIN 包却未发送响应,通过抓包验证了这一情况。


问题核心在于为什么没有回复 FIN。Dubbo 服务底层使用 Netty,作为普通的 TCP 服务端,关键在于 FIN 包的回复。


分析显示,如果服务没有发送 FIN 包,可能原因有:


1. 半连接队列或全连接队列积压,通过 ss 命令查看全连接队列大小和等待 accept 的连接个数。


2. LISTEN 状态的 socket,Recv-Q 表示等待用户进程 accept 的连接个数,Send-Q 表示全连接队列最大容纳的连接数。


非 LISTEN 状态的 socket,Recv-Q 表示 receive queue 字节大小,Send-Q 表示 send queue 字节大小。


通过 ss 命令确认 Recv-Q 为 0,全连接队列无积压。


嫌疑指向 Netty 没有注册事件,导致收到 FIN 包后无动于衷。


进一步发现,凌晨 1 点业务实例加载大量数据导致堆内存占满,持续进行 fullgc。Netty 线程出现 OOM 异常。在 org.jboss.netty.channel.socket.nio.NioServerBoss#process 方法中,Netty 调用 accept 取走连接,第 19 行尝试注册事件时抛出 java.lang.OutOfMemoryError 异常。


因此,Netty 处理不健壮,try-catch 包裹了 accept 连接和注册事件逻辑,在 OOM 异常处理时,未能成功注册事件或关闭连接,导致连接存在但不被监听处理。


推荐相关视频学习:



LinuxC++零拷贝的实现 用户态协议栈 ntytcp
支撑互联网的基石 TCP/IP,5个方面全面解析
TCP/IP协议栈深度解析丨实现单机百万连接丨优化三次握手、四次挥手
LinuxC++后台服务器开发架构师免费学习地址

为模拟问题复现,可使用字节码注入或直接重构 Netty 源码。本地拥有 Netty 源码,采用重构方法更快。重新构建项目后,使用 nc 模拟健康检查握手并断开连接,CLOSE_WAIT 状态连接持续存在直至 Netty 进程退出。再次 nc 断开连接,新增 CLOSE_WAIT 状态。由于服务持续进行健康检查,导致 OOM 期间 CLOSE_WAIT 状态不断增加。


问题核心:Netty 代码不够健壮,尝试捕获异常时,未能正确处理连接注册事件或关闭连接,导致连接存在且未被监听。


修改方式:在 catch 处理 throwable 时关闭连接即可,最新版本的 Netty 代码这部分逻辑已优化,将 accept 和注册事件拆分。有兴趣的读者可以尝试。


学习 TCP、网络编程是解决类似问题的关键。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中导条约是什么意思 南京的事业单位待遇好吗 condition ...个登陆和注册信息的源代码,最简单的就可以,不需要数据库的那种... 个旧附近的vba编程培训机构哪家比较正规? 个旧附近的.Net培训班? 个旧附近的编程培训班? 个旧附近哪里有编程培训在哪里? 湖口哪里可以学电脑电脑技术哪里可以学习 个旧北大青鸟少儿编程培训学费多少? 川西雪山排名_318看雪山的最佳地点 集成灶报价的利润空间大吗? TCP连接CLOSE_WAIT和TIME_WAIT状态学习总结 集成灶报价后存在什么差异? 有用黑霉、苹果智能机的吗,介绍一下和诺基亚相比什么样 在英国内战(1642—1649)中,苏格兰军到底和谁一伙啊?题 手机反应慢怎么办?不慌有小编在 现在什么手机反应速度快。我要那种手一点就来的那种速度 我手机刚买回来,点软件反应好快,现在是不是下载软件多了,还是怎么回事... 手机的反映速度取决于什么因素? 诺基亚手机的处理器大小关系的手机运行速度? 智能手机反应速度与配置的关系 蜜袋鼯接不住会气死吗 我用SOMIC耳机和KKcapture软件录视频,选了Wave为啥还只能录电脑声音,可... 用fraps软件录视频出了问题, kkcapture怎么用视频录制软件kkcapture怎么使用? kkcapture录视频,戴麦克风,只录到麦克风的声音了,怎么能既录到麦克风... 迦百农对夹蝶式止回阀B,用途和性能规范 对夹蝶式止回阀简介 盘锦至合肥花冲公园途径地方 如何找到适合的服装风格? 身高1米60左右,体重140斤中年女性,如何选衣服,该选多大尺码?_百度... close wait什么意思 目前的集成灶报价还是像以前那么虚高么? 服务端大量处于 TIME_WAIT 和 CLOSE_WAIT 状态连接的原因有哪些? 奶茶饮品店如何做营销,生意不好降价能救 close wait: 为什么会出现ESTABLISHED和SYN_SENT状态,而对方没有响应... 服务端close-wait或者time-wait状态过多会导致什么样的后 proe两个圆弧如何实现平滑的过度,上图 求款看动漫的软件,类似QQLIVE之类 电影上映多久QQlive才能更新到 求一款网络播放器,可以在播放器上边看电影边聊天的,高分 美人心计 为什麼窦长君说是慎儿掌管六宫呢? ...底与下底相等时梯形变成了什么形当它的上底是0时梯形变 有什么图形可以用梯形的面积公式求 ...当它的上底和下底相等时,梯形就变成了( )形,面积计算公_百度知 ... 用字母表示梯形的面积公式是( );当它的上底与下底相等时,梯形变成... 英氏的辅食油好吗? 小公司和大公司哪个好 老公老家现在拆迁想把女儿户口迁到现在婆婆家去他们要拆迁户口迁不进去...