阶段 7:短连接专题(Day 24-27)
⏳ 状态:规划中。
撞上的问题:长连接测试全部通过后,试着用短连接模式(每次请求建立新连接、收发后立即关闭)压测,立刻看到 TIME_WAIT 堆积如山,端口不够用,SYN 队列溢出。
背景
长连接和短连接的问题完全不同——长连接的核心是"连接数承载",短连接的核心是"连接的快速创建和销毁"。
每日概览
| 天 | 主题 | 关键操作 | 核心发现 |
|---|---|---|---|
| Day 24 | 短连接基线压测 | wrk 短连接压测,记录 QPS 和 TIME_WAIT 峰值 | TW 堆积到 3 万+ |
| Day 25 | TIME_WAIT 优化 | 开启 tcp_tw_reuse、降低 tcp_fin_timeout,对比前后 | TW 峰值 ↓70%+ |
| Day 26 | 端口耗尽 | 故意缩窄端口范围触发 EADDRNOTAVAIL,再修复 | 理解端口四元组唯一性 |
| Day 27 | SYN 队列溢出 | 低 somaxconn 触发 ListenOverflows,观察 SYN_RECV 堆积 | SYN Cookie 机制 |
长短连接问题对照
| 问题 | 长连接 | 短连接 |
|---|---|---|
| TIME_WAIT 堆积 | 极少出现 | 核心问题 |
| 端口耗尽(EADDRNOTAVAIL) | 不会 | 核心问题 |
| SYN 队列溢出 | 不会 | 典型场景 |
| 百万 FD 承载 | 核心问题 | 不会出现 |
| NUMA 持续损耗 | 核心问题 | 难以复现 |
短连接的知识点是长连接无法替代的,但仅占总体学习时间的约 15%。
完工验证清单
- [ ]
tcp_tw_reuse= 1,tcp_fin_timeout≤ 15 - [ ] 短连接 QPS 相比优化前提升 ≥ 30%
- [ ] 能复现并修复端口耗尽
- [ ] 理解 SYN Queue 和 Accept Queue 的区别
一句话总结:长连接是体力活(承载一百万),短连接是技巧活(快速回收、端口复用)——TIME_WAIT、端口耗尽、SYN 队列是短连接独有的三座大山,一个参数一个坑。