-
我的服务调用下游一切正常,可一到高峰期就大量报连接失败、报错说没有可用端口了,我的机器明明负载不高、内存也充足,排查半天发现是几万个处于 TIME_WAIT 状态的连接把本地端口耗光了的深度复盘
我有个服务要频繁调用一个下游接口,写法很干净:每次调用都新建连接、发请求、拿响应、然后立刻关掉,用完即走。平时跑得好好的。可一到流量高峰就灾难了:服务大量报 Cannot assign requested address(没有可用端口),新的下游建连接连失败。我以为机器扛不住了,可一看监控傻眼:CPU 不高、内存充足、下游也好好的,机器很闲,凭什么连接就建不出来?直到我 netstat 统计连接状…- 0
- 0
-
调用下游服务的接口慢得离谱、机器上还堆了几万个 TIME_WAIT,我抓包才发现每发一个请求都在重新三次握手加 TLS 握手:一次 HTTP 连接没复用、每次新建连接把建连开销付了无数遍的深度复盘
我写了个服务频繁调用下游 HTTP 接口,压测时 QPS 怎么也上不去、延迟还高,机器上 netstat 里密密麻麻几万个 TIME_WAIT。一开始以为下游慢,抓包才发现:我每发一个 HTTP 请求都在新建一个全新 TCP 连接——请求前三次握手+TLS 握手,请求后立刻关闭,大部分时间耗在建连和关连上、真正传输反而很少;而主动关闭的连接大量堆在 TIME_WAIT 耗端口。根因是每次请求 ne…- 2
- 0
-
一个每次请求都 new 一个 HttpClient 再 Dispose 的写法,在高并发下把服务器端口耗尽、抛出无法分配地址的异常:一次 HttpClient 误用的深度复盘
对外调用第三方的服务,一到高峰就大面积抛 SocketException(无法分配请求的地址),第三方却说一切正常,自己 CPU 内存也不高。netstat 一看几万个 TIME_WAIT 把本地端口耗尽了。根因是每次调用都 new 一个 HttpClient、用完 using Dispose——这看似标准,可 HttpClient 内部维护连接池、被设计为长期复用,频繁 new+dispose …- 0
- 0
-
我的服务高峰期突然报 Cannot assign requested address,明明机器很闲、连接也没泄漏,我对着几万个 TIME_WAIT 排查了大半天的复盘
那天高峰期,我们一个对外服务突然大面积报 connect: cannot assign requested address(errno 99),最迷惑的是机器 CPU、内存全闲着,连接池也没泄漏,可就是建立不了新连接。我从应用层一路查到内核 TCP 状态,直到 netstat 里看到密密麻麻几万个 TIME_WAIT 才恍然大悟:我们这服务作为客户端高并发地用短连接调下游,每次用完主动关闭就进入 …- 0
- 0
-
我的服务调外部接口一到高峰就报"cannot assign requested address"、机器上堆了几万个 TIME_WAIT 连接,我盯着 netstat 排查了大半天才发现连接根本没复用
我的服务频繁调外部 HTTP 接口,一到高峰就大面积报错 cannot assign requested address、延迟还变高。netstat 一看惊呆:机器上堆了几万个 TIME_WAIT。深挖才懂:我每次请求都新建一个 TCP 连接、用完就关、从不复用——后果一是每次都白付三次握手(HTTPS 还有 TLS 握手)的延迟;后果二更致命,主动关闭的连接进入 TIME_WAIT 要停留约 2…- 4
- 0
-
我图省事每次请求都新建一个 HTTP 客户端,平时跑得好好的,流量一上来就连接耗尽、TIME_WAIT 堆成山、还报 too many open files,我查了好几天才懂连接要复用的深度复盘
我的服务频繁调外部 HTTP 接口,图省事每次请求都 new 一个 HTTP 客户端、用完就扔。低流量没事,可一到高峰:请求变慢、TIME_WAIT 堆成山把端口占光、还报 too many open files、甚至连不上外部接口。深究才懂:我把"连接"当成了廉价消耗品频繁创建销毁,可它是昂贵(每次要 TCP 三次握手+HTTPS 的 TLS 握手)又有限(端口约 6 万、f…- 0
- 0
-
服务跑着跑着就报"cannot assign requested address",我以为是端口配置错了,真相却是几万个 TIME_WAIT 把端口耗光了的复盘
一个高频调用下游 HTTP 接口的服务,跑一段时间后开始报 dial tcp: cannot assign requested address。我以为是端口配置错,直到 netstat 一统计——近三万个 TIME_WAIT!根因是我为每个请求都新建 TCP 连接、用完就关,主动关闭方的连接进入 TIME_WAIT 停留 60 秒,每秒几百个累积起来,把本机约 2.8 万个临时端口占光了。这篇从 …- 0
- 0
-
端口被 TIME_WAIT 占满:TCP 短连接避坑复盘
这次事故的报错信息第一眼看上去毫无道理:我们一个服务在流量高峰期偶发性地报一个奇怪的错误 Cannot assign requested address 无法分配请求的地址。我盯着这行错误懵了好一会儿:分配地址?我又没在创建什么地址,我只是在调用一个下游的 HTTP 接口而已啊,而且这个错误只在高峰期出现,服务器的 CPU 内存带宽也都不紧张,一个资源充裕的服务器却报无法分配地址,这到底是什么玄学…- 0
- 0
-
下游没挂自己先崩:TCP 连接 TIME_WAIT 端口耗尽避坑
一个调用下游接口的服务,平时风平浪静,流量一冲高就大面积抽风:日志刷屏般地报 connection refused,更多的是一句陌生的 cannot assign requested address,可被调用的下游监控却一切正常、根本没挂。我顺着"下游扛不住"查了半天一无所获,直到在本机敲下 ss -s,数字一出来就全明白了——几万个连接密密麻麻堆在 TIME_WAIT,本机用…- 7
- 0
-
三万个 CLOSE_WAIT 压垮服务:看懂 TCP 连接状态机
一个风平浪静的上午,核心服务突然刷出满屏 too many open files,接口大面积超时。调大 ulimit 只撑了十几分钟,一条 netstat 揭开真相:三万八千个 CLOSE_WAIT 死死占着句柄只增不减。从这次句柄耗尽事故出发,这篇文章把 TCP 四次挥手状态机、CLOSE_WAIT 与 TIME_WAIT 的本质区别、连接泄漏的定位与修复、长连接复用、超时设置到优雅关闭,一次讲…- 0
- 0
-
TCP 连接的生与死:从一次端口耗尽彻底搞懂 TIME_WAIT
一个调用量很大的网关服务某天开始零星报 connect: cannot assign requested address,下游好好的,网络也通,ss -s 一看竟有六万多个 TIME_WAIT 把本地端口占了个精光。很多人第一反应是把 TIME_WAIT 当 bug 干掉,我差点就去开那个臭名昭著的 tcp_tw_recycle。这篇从端口耗尽讲起,把 TCP 连接怎么生(三次握手为什么是三次)、…- 0
- 0
-
TCP TIME_WAIT 占满端口导致支付网关全面失败的复盘:90 分钟故障 + 5 种修法 + 8 条网络编程纪律
一次"优化"上线把 HttpClient 从连接池改成每次 new,90 分钟内 1.2 万 QPS 把网关本地端口耗尽,所有外部银行接口失败。本文复盘事故全过程、TIME_WAIT 的内核机制、5 种修法实测对比(连接池/tcp_tw_reuse/扩端口范围等)、8 条网络编程纪律、DNS/eBPF/TLS 等深度治理经验。- 0
- 0
-
TCP 连接优化完全指南:从一次"压测 QPS 上不去,CPU 内存全很闲,连接却建不动"看懂三次握手与 TIME_WAIT
2021 年我接手优化公司一个内部 API 网关一场大促前要给它压测看能扛多少 QPS 怎么把它的吞吐做上去这件事我压根没多想第一版我做得很顺手网关嘛收到请求转发给后端服务拿到响应再返回我用最直接的写法每来一个请求就新建一个连接到后端转发完拿到结果把连接关掉就完事了本地拿低并发一压真不错延迟很低转发又快又稳我心里很笃定TCP 连接不就是个透明的管道connect 一下就有了网络快不快只看带宽连接本…- 0
- 0
-
端口没人占却绑不上:一次 Linux Address already in use 排查复盘
上线新版本 kill 掉老进程后启动新进程,报 bind: Address already in use,可 ps 看老进程确实没了 ss -tlnp 看 8080 也没人在 LISTEN,等一两分钟再启动又能起来。排查梳理:端口被占用不等于有一个活着的进程占着它,TIME_WAIT 状态的旧连接没有进程也占着端口;ss -tlnp 的 -l 只列 LISTEN 状态会漏掉 TIME_WAIT,要…- 0
- 0
-
服务报 Cannot assign requested address:一次 Linux TIME_WAIT 端口耗尽排查复盘
一个高频调用下游 HTTP 接口的服务,业务高峰期开始报 Cannot assign requested address,可下游正常、网络正常、配置里的地址也没错。排查梳理:这个报错耗尽的不是 IP 而是本地端口,每发起一条对外连接都要从 ip_local_port_range 借一个源端口,默认只有约 2.8 万个;ss 一看 TIME_WAIT 堆了两万八千多条,但 TIME_WAIT 不是 …- 0
- 0
-
本机无法建立新连接:一次 Linux TCP 与 TIME_WAIT 排查复盘
高峰期服务狂报 Cannot assign requested address,不是地址配错,是本机端口耗尽。排查梳理:ss 与 netstat 看连接、TCP 连接状态机、TIME_WAIT 堆积耗尽临时端口、CLOSE_WAIT 堆积是代码忘了 close、端口与文件描述符上限调优,以及一套网络连接排查纪律。- 4
- 0
-
凌晨被叫起来排查 TIME_WAIT 堆 5 万的故事:从端口耗尽到连接池治理
一台业务网关凌晨开始报 Cannot assign requested address,netstat 看到 5.6 万个 TIME_WAIT。本文复盘从端口耗尽到连接池修复的全过程,涵盖 Java/Go/Python HTTP 客户端正确写法、Nginx keepalive 配置、tcp_tw_recycle 为什么不能开,以及 6 行排查命令。- 0
- 0
TIME_WAIT
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!

















