defaw
5 小时 29 分钟前
## 环境
| 角色 | CPU | 内存 | 带宽 |
|------|-----|------|------|
| 客户端 | 16 核 | — | 300 兆 |
| 服务器 | 2 核 (Xeon) | 1.6G | **3 Mbps** |
## 测试工具
Go 编写的 TCP echo 程序 `conntest`,工作模式:
1. **Phase 1 — 建连**: 并发 dial N 个 TCP 连接到服务器
2. **Phase 2 — 写**: 全部连接建立后,统一发送 1 字节
3. **Phase 3 — 读**: 等待服务器 echo 回显 1 字节
4. 两端开启 `TCP_NODELAY`
## 测试结果
### 并发测试
| 连接数 | 建连耗时 | 写耗时 | 读耗时 | 失败 | 总耗时 |
|--------|----------|--------|--------|------|--------|
| 2,000 | 4.7s | 2.6ms | 12s | 0 | ~17s |
| 10,000 | 5.4s | 8.5ms | 27s | 0 | ~33s |
| 20,000 | 6.0s | 17.8ms | 73s | 10 | ~79s |
| 40,000 | 11.0s | 33.7ms | 322s | 91 | ~5m33s |
### 流量消耗 (10,000 连接)
| 方向 | 数据量 | 每连接 |
|------|--------|--------|
| 服务器接收 | 5,795 KB | ~590 B |
| 服务器发送 | 6,426 KB | ~660 B |
| **双向合计** | **~12 MB** | **~1,250 B** |
应用数据仅 2 字节,其余为 TCP/IP 首部开销。
## 瓶颈分析
主要瓶颈在**服务器 3 Mbps 上行带宽**:
- 每个 TCP 握手包 ~80 字节( IPv6 + TCP 首部)
- 3 Mbps = 375 KB/s ,所有出站包串行排队
- 40,000 连接的 SYN-ACK + echo 回显纯带宽耗时已 ~17s
- 叠加 2 核 CPU 的 goroutine 调度开销,read 阶段退化严重
## 结论
1. IPv6 连通正常
2. 建连能力 OK ,40,000 连接全部建立成功
3. 瓶颈在服务器:**3 Mbps 带宽** + **2 核 CPU** 限制了并发吞吐
4. 每连接开销 ~1.25 KB