【tcp】TCP CLOSE_WAIT问题分析与定位

一、问题背景

某日,运维突然在群里突然丢出告警信息:

对象类型:主机
检测规则:NET.TCP.CLOSE.WAIT
告警内容:CLOSE_WAIT状态的TCP连接数大于500
....
image.png

上面告警信息已经说的很明白,CLOSE_WAIT状态的TCP连接数过多。
如果没有网络编程经验或对网络协议也不了解的人,看着这提示可能还是一脸懵逼不知所:

CLOSE_WAIT是什么鬼?
应用上很多连接第三方服务,到底是哪个服务有问题?
如何定位哪里的代码有问题?

二、问题分析

CLOSE_WAIT是什么?

image.png
image.png

CLOSE_WAIT是TCP的一个状态,它在ESTABLISHED(连接建立)基础上,收到对方的FIN且我方已回ACK,说白了就是对方已关闭我方尚未关闭。

如果有长时间和大量的TCP处于CLOSE_WAIT状态时,代码可能是问题的,原因是连接未正确关闭。

三、如何定位代码问题

如果系统代码简单,直接去看对应的代码有没可能导致连接未关闭即可。

如果系统代码量大且对接的第三方比较多,Linux平台可以通过netstat –nap | grep CLOSE_WAIT | grep ${pid} 看看哪个IP的连接出现了问题,再针对性的查找代码。

image.png

如果IP不够直观,可以通过IP反解析成域名,如:

image.png

IP地址反查域名在线工具
http://ip.yqie.com/iptodomain.aspx

当然如果本地环境可以复现最好不过了,可以在java.net.Socket或java.net.InetSocketAddress$InetSocketAddressHolder类的构造函数设置断点进行DEBUG


image.png

如果是生产环境,可以使用arthas(https://alibaba.github.io/arthas/)的stack命令,再加入IP过滤参数:

stack java.net.InetSocketAddress$InetSocketAddressHolder <init>

然后静静地等等Socket连接的建立即可知道产生连接代码的位置:

image.png

紧急的生产问题一般都会heap dump然后重启应用的,理论上可以通过MAT查找分析属性released状态为false的org.apache.http.impl.execchain.ConnectionHolder对象,再找到关联的incoming references对象CloseableHttpResponse(限于HttpClient)。

四、CLOSE_WAIT有什么影响?

如果代码有问题导致出现大量的CLOSE_WAIT会有什么影响呢,会影响业务吗?

Socket网络连接是一种资源,资源泄露肯定会有影响的。

首先对于系统的影响,每个Socket连接都需要一个随机端口号(作为Client),而系统理论上最大支持65535;
另外,在Linux中,网络连接是一个文件描述符,受限于系统ulimit –n参数,如果达到最大会导致“Too many open files”。

对于应用来说,应用一般是使用连接池,连接池是有最大数量限制的,如果没有及时释放导致连接泄露耗尽,线程就无法获取新的连接而影响业务。如果连接池的maxWait设置过大会造成线程阻塞时间过长,对于流量大的系统极容易造成大量请求阻塞甚至雪崩。

五、问题总结

  1. 任何与资源相关的必须要确保关闭。Java有Closeable接口,可以通过try ... 语法糖自动关闭释放。

  2. 了解基本的网络编程知识和相应的定位工具。

  3. 开发阶段加强代码审查,压力测试也是发现资源问题的必要手段,同时生产环境配备必要的基础监控能力。

六、参考

CLOSE_WAIT问题分析与定位
https://mp.weixin.qq.com/s/_YmYVxwMOzZjETYlnbToZw

我是如何确认线上CLOSE_WAIT产生的原因及如何解决的
https://www.cnblogs.com/dukuan/p/8178728.html#4334700

简单的 HTTP 调用,为什么时延这么大?
https://mp.weixin.qq.com/s/lvs-3VXfrScdOQVRkkLyRw

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容