Appearance
Day 20: 一百万!里程碑 (One Million — The Milestone!)
所属阶段:阶段 6 — 百万长连接
今日目标
从 60 万到 100 万连接的终极爬升——这是整个项目的高潮时刻。
前置状态
- 500K 连接稳定,内存约 5GB
- 所有优化就位(FD/TCP/NUMA/RSS/keepalive)
- 只差最后一口气
百万爬升方案
bash
# 服务端:双 NUMA 各 4 进程
bash scripts/numa-split-server.sh --port 9090 --workers-per-node 4 &
# 逐级爬升:每级 10 万,观测 2 分钟
# 60→70→80→90→100 万| 阶段 | 新增连接 | 累计 | 观测重点 |
|---|---|---|---|
| 1 | +10 万 | 60 万 | 建连速率有无下降 |
| 2 | +10 万 | 70 万 | 内存线性增长 |
| 3 | +10 万 | 80 万 | CPU %soft 分布 |
| 4 | +10 万 | 90 万 | FD 是否接近上限 |
| 5 | +10 万 | 100 万 | 全指标稳定 |
百万时刻的监控
bash
# 终端 1:连接数
watch -n 1 'ss -s'
# 终端 2:内存
watch -n 1 'free -h'
# 终端 3:网络
sar -n DEV 1
# 终端 4:CPU/NUMA
mpstat -P ALL 1 &
watch -n 1 'numastat -p $(pidof echo-server)'达到百万后做什么
- 保持 10 分钟不动,观察抖动
- 记录 P99 延迟是否有尖刺
- 检查是否有连接意外断开
bash
# 验证
ss -tan | wc -l # 应该 ≥ 1,000,000
ls /proc/$(pidof echo-server)/fd | wc -l # FD 数
free -h # 内存使用里程碑记录
| 指标 | 最终值 |
|---|---|
| TCP 连接数 | ≥ 1,000,000 |
| 内存总用量 | 待记录 GB |
| FD 使用量 | 待记录 |
| 建连总耗时 | 待记录 |
| 保持时间 | ≥ 10 分钟 |
一句话总结:一百万——从三周前 1024 个 FD 崩溃到此刻百万连接稳定运行,每一个瓶颈都是亲手撞上的,每一个参数都亲眼见过"不改会怎样"。这不是"配置出来的百万",是走完 20 天问题诊断后水到渠成的结果。