SSH 连接复用测量 — 第 0 步(改造前基线)¶
- 测量时间:2026-09-30
- 对象工程:
env-monitor-deploy(14 台外部主机 + 单控制面 K8s) - 脚本:
measure_conn.py(零侵入:不修改共享库与工程源码,仅在本次进程内 monkeypatch 计数) - 被测量命令:工程自带的只读子命令
verify/precheck
1. 数据¶
| 子命令 | get_connection | TCP 握手 | close | 主机数 | 耗时(s) | 退出码 |
|---|---|---|---|---|---|---|
verify |
22 | 22 | 22 | 14 | 10.98 / 11.39(两次) | 0(校验通过) |
precheck |
14 | 14 | 14 | 14 | 11.32 | — |
drift |
22 | 22 | 22 | 14 | 12.61 | 0(无漂移) |
deploy(幂等复跑) |
44 | 44 | 44 | 14 | 26.5 / 27.25(两次) | 0(零变更) |
verify 每台分布:.16/.17/.21/.22/.23/.24/.28/.29 = 2 次;.18/.19/.20/.25/.26/.27 = 1 次。
precheck 每台分布:14 台各 1 次。
deploy 每台分布:上述 8 台各 4 次、其余 6 台各 2 次 —— 恰好是 verify 的两倍(原始数据存 raw-deploy.json)。
2. 归因(对既有认知的修正)¶
-
每次
get_connection恰好产生 1 次 TCP 握手(22=22、14=14,两次测量均 1:1)。 现有SSHConnectionPool.get_connection每次new SSHConnection()+connect(),_pool/_connections从未被写入,调用侧finally: conn.close()立即关闭 —— 连接复用零生效,此为实锤。 -
verify的 22 =host_agent全量 14 台 × 1 +domain_collectors8 个领域目标 × 1; 两组重叠的 8 台因此各建 2 条连接(两个模块各探一次)。 -
推翻「每条远端命令 2 次 SSH 握手」:只读路径上每台 1 条命令 = 1 次握手。 真实形态是同一流程内重复探测:
deploy幂等复跑每台被探 4 次或 2 次 (host_agent的sync_status+validate各一轮,domain_collectors再各一轮), 每轮独立建连;44 = 22 × 2正说明这一点。基线记录的「14 台 = 28 次」(= 14×2) 是只有host_agent时的同类重复,而非一条命令握手两次。
3. 改造收益预估¶
| 路径 | 现状握手数 | 复用后 | 收益 |
|---|---|---|---|
precheck |
14 | 14 | 0(每台仅 1 条命令,握手无法避免) |
verify |
22 | 14 | −8(约 36%) |
deploy 幂等复跑 |
44(实测) | 14 | −30(约 68%) |
| 变更收敛阶段 | 未测(每台 5~10 条命令,会改系统故不测) | — | 收益最大,按同构推算 |
4. 复现¶
cd <工程根>
.venv/bin/python <本目录>/measure_conn.py verify # 或 precheck
5. 后续¶
- 连接复用改造已于 2026-09-30 完成:
deploy幂等复跑 44 → 14 握手、 26.5 s → 17.1 s;verify22 → 14。方案与实施记录见../conn-reuse-refactor-20260930/SOP.md。 - 变更收敛阶段的握手数仍未实测(该阶段每台另有 5~10 条变更命令,复用收益预计更高, 需真实变更窗口才能测)。
来源:
/home/rain/Documents/k8s_ins/conn-reuse-measure-20260930/MEASUREMENT.md| 最后更新:2026-09-30 13:39(由build/sync.py同步,请勿在站点侧修改)