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

news2025/1/19 8:02:35

一、问题背景

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

对象类型:主机
检测规则: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



作者:Bogon
链接:https://www.jianshu.com/p/7f7c5d30721f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1340079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【UE在关卡序列制作图片序列,捕获影片时出现小白人下落的场景或者空场景】

UE在关卡序列制作图片序列,捕获影片时出现小白人下落的场景或者空场景 问题 下面是有问题的截图 1.如果场景没有放角色就是纯天空 2.如果有角色就是角色一直在下落 原因 使用影片场景捕获&#xff08;旧版时&#xff09;&#xff0c;如果镜头帧率的长度没有和影片的长度一致…

操作教程|MeterSphere UI测试+VNC:简单、快捷地查看UI测试实时执行详情

编者注&#xff1a;本文为CSDN博主hxe116的原创文章。 原文链接为&#xff1a;https://blog.csdn.net/hxe116/article/details/134714960?spm1001.2014.3001.5502 作为一款一站式的开源持续测试平台&#xff0c;MeterSphere涵盖了测试跟踪、接口测试、UI测试和性能测试等功能…

YOLO格式转VOC格式

#仅支持图片格式统一的,多格式图片需要完善 from xml.dom.minidom import Document import os import cv2 from PIL import Image import numpy as np def makexml

【MAX30102 T03】心率血氧传感器

目录 一、实物图 二、原理图 引脚定义 三、简介 选择模式 I2C 通讯格式&#xff1a; UART 通讯格式&#xff1a; 四、结构尺寸 五、注意&#xff1a; 作者&#xff1a;特纳斯电子 请以底部官方认证的推广方式联系作者 一、实物图 二、原理图 引脚定义 三、简介 血氧心率测量模…

Matplotlib的详细使用及原理

认识matplotlib Matplotlib是一个Python 2D绘图库&#xff0c;能够以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形&#xff0c;用来绘制各种静态&#xff0c;动态&#xff0c;交互式的图表。 Matplotlib已经成为python中公认的数据可视化工具&#xff0c;我们所熟…

巨匠纺・品鉴窗帘是一线品牌吗,产品质量怎么样

巨匠纺・品鉴窗帘是一线品牌&#xff0c;产品品质有保障&#xff0c;作为深耕行业多年的窗帘品牌&#xff0c;巨匠纺・品鉴窗帘凭借不断升级的匠心品质、过硬的综合实力和品牌影响力在众多窗帘中脱颖而出&#xff0c;公司先后荣获中国 3.15 诚信品牌、中国绿色环保品牌、中国窗…

【学习笔记】GAN生成对抗神经网络原理与实践

最早在2014年Ian J. Goodfellow等人提出的GAN。 文献为&#xff1a;Generative Adversarial Nets GAN面临的主要挑战有模型训练困难&#xff0c;容易出现生成模型坍塌等问题。因为GAN是采用生成对抗策略来训练的&#xff0c;优化生成模型必然导致判别模型的损失增大。 定义 生…

旧衣回收小程序搭建,稳占回收市场

近几年我国大众的消费水平不断提升&#xff0c;闲置物品也相应增加了不少&#xff0c;尤其是闲置衣服&#xff0c;为了减少资源浪费&#xff0c;旧衣服回收回收行业受到了大众的关注。 目前我国旧衣服回收行业的市场规模达到了300多亿元&#xff0c;旧衣回收行业的商业价值非常…

机器学习之人工神经网络(Artificial Neural Networks,ANN)

人工神经网络(Artificial Neural Networks,ANN)是机器学习中的一种模型,灵感来源于人脑的神经网络结构。它由神经元(或称为节点)构成的层级结构组成,每个神经元接收输入并生成输出,这些输入和输出通过权重进行连接。 人工神经网络(ANN)是一种模仿生物神经系统构建的…

算法基础之整数划分

整数划分 核心思想&#xff1a; 计数类dp 背包做法 f[i][j] 表示 取 1 – i 的物品 总容量为j的选法数量 f[i][j] f[i-1][j] f[i-1][j-v[i]] f[i-1][j-2v[i]] f[i-1][j-3v[i]] ……f[i-1][j-kv[i]] f[i][j-v[i]] f[i-1][j-v[i]] f[i-1][j-2v[i]] f[i-1][j-3v[i]] ……f[i…

十分钟安装Tensorflow-gpu2.6.0+本机CUDA12 以及numpy+matplotlib各包版本协调问题

换了台机器&#xff0c;又装Tensorflow&#xff0c;记得我第一次装的时候装了好几天&#xff0c;而今天只用了十分钟就搞定了&#xff0c;因为这个方法只用在终端操作&#xff0c;不用去英伟达官网下载包&#xff0c;刷刷刷的贼快&#xff0c;只是后面去找版本的对应问题了又花…

模拟算法 蓝桥杯备赛系列 acwing

文章目录&#xff1a; 基础知识 什么是模拟&#xff1f; 例题 一、错误票据 1.解题思路 2.代码 二、移动距离 1.解题思路 2.代码 三、航班时间 1.解题思路 2.代码 四、外卖优先级 1.解题思路 2.代码 前面为了目录好看大家就当个玩笑看吧哈哈哈。下面上正文。 正文 基础知识 什…

码住!8个小众宝藏的开发者学习类网站

1、simplilearn simplilearn是全球排名第一的在线学习网站&#xff0c;它的课程由世界知名大学、顶级企业和领先的行业机构通过实时在线课程设计和提供&#xff0c;其中包括顶级行业从业者、广受欢迎的培训师和全球领导者。 2、VisuAlgo VisuAlgo是一个免费的在线学习算法和数…

Nginx直播服务器搭建及推拉流测试

文章目录 前言一、搭建 Nginx 直播服务器1、安装 Nginx 依赖2、下载并解压源码①、下载并解压 nginx-http-flv-module 直播模块源码②、下载并解压 Nginx 源码 3、编译安装4、配置 rtmp 服务①、添加 rtmp 服务②、验证配置 二、推流、拉流测试1、ffmepg 推流2、VLC 拉流 前言 …

【汇编笔记】初识汇编-内存读写

汇编语言的由来&#xff1a; CPU是计算机的核心&#xff0c;由于计算机只认识二进制&#xff0c;所以CPU执行的指令是二进制。 我们要想让CPU工作&#xff0c;就得给他提供它认识的指令&#xff0c;这一系列的指令的集合&#xff0c;称之为指令集。 指令集&#xff1a; 不同的体…

PyTorch深度学习实战(28)——对抗攻击(Adversarial Attack)

PyTorch深度学习实战&#xff08;28&#xff09;——对抗攻击 0. 前言1. 对抗攻击2. 对抗攻击模型分析3. 使用 PyTorch 实现对抗攻击小结系列链接 0. 前言 近年来&#xff0c;深度学习在图像分类、目标检测、图像分割等诸多领域取得了突破性进展&#xff0c;深度学习模型已经能…

React学习计划-React16--React基础(七)redux使用与介绍

笔记gitee地址 一、redux是什么 redux是一个专门用于做状态管理的js库&#xff08;不是react插件库&#xff09;它可以用在react、angular、vue的项目中&#xff0c;但基本与react配合使用作用&#xff1a;集中式管理react应用中多个组件共享的状态 二、什么情况下需要使用r…

go 源码解读 - sync.Mutex

sync.Mutex mutex简介mutex 方法源码标志位获取锁LocklockSlowUnlock怎么 调度 goroutineruntime 方法 mutex简介 mutex 是 一种实现互斥的同步原语。&#xff08;go-version 1.21&#xff09; &#xff08;还涉及到Go运行时的内部机制&#xff09;mutex 方法 Lock() 方法用于…

0.1+0.2≠0.3,揭秘Python自带的Bug

朋友们&#xff0c;问一个简单的问题&#xff1a;0.10.2&#xff1f; 你肯定会说&#xff1a;中国人不骗中国人&#xff0c;0.10.20.3。 但是在Python里&#xff0c;0.10.2≠0.3 &#xff0c;我们今天一起来看看这个&#xff0c;并且看一下解决办法。 离奇的错误 在python里…

解决ELement-UI懒加载三级联动数据不回显(天坑)

最老是遇到这类问题头有点大,最后也是解决了,为铁铁们总结了一下几点 一.查看数据类型是否一致 未选择下 选择下 二.处理数据时使用this.$set方法来动态地设置实例中的属性&#xff0c;以确保其响应式 三.绑定v-if 确保每次重新加载 四.绑定key 五.完整代码