BA Mock LLM 压测结果汇总

生成时间:2026-07-03 11:57:45 | 场景:100 并发 session,请求 mock LLM 流式 tool call 写大文件

群内简短结论

1. 复现结果

2. 版本对比

3. BO / PAT 校验

4. PyArmor 加密影响

5. 初步判断

v1.0.9 vs v1.0.4 session create p50
-36%
11236ms -> 7216ms
v1.0.9 vs v1.0.4 health p50
-51%
6014ms -> 2970ms
PyArmor chat p50 开销
1.41x
85670ms -> 120976ms
PyArmor health p50 开销
1.81x
767ms -> 1384ms

一、镜像版本趋势(box)

这组是同一台测试机器 box,BA 镜像从 1.0.4 切到 1.0.71.0.9 后复跑。worker 不 OK 主要是 Socket.IO namespace connect 失败或聊天超时;由于 mock LLM 永远只发 tool call,这里 worker OK 不是业务成功率,只表示脚本收到足够多流式 patch 后主动停止。

版本总耗时 sworker 状态create p50 mscreate p95 mshealth p50 mshealth p95 msmodels p50 mssessions p50 msturn patches
BA v1.0.4 镜像(box)256.1error: 85, timeout: 15112361624660147624308431242934
BA v1.0.7 镜像(box)249.3timeout: 21, error: 797375980331963673276727645128
BA v1.0.9 镜像(box)249.0timeout: 24, error: 7672161006929704451438235635429

create p50 趋势

BA v1.0.4 镜像(box)
11236
BA v1.0.7 镜像(box)
7375
BA v1.0.9 镜像(box)
7216

health p50 趋势

BA v1.0.4 镜像(box)
6014
BA v1.0.7 镜像(box)
3196
BA v1.0.9 镜像(box)
2970

二、本地源码与 release 镜像对照

这组用于判断发布形态和 PyArmor 加密的影响。本地 release 镜像都由当前 worktree 构建,未加密和 PyArmor 加密只改 Dockerfile 的 ENCRYPT 参数;两者都连接 box BO 认证,LLM 使用本机 mock。

对象总耗时 sworker 状态create p50create p95chat p50health p50models p50sessions p50
本地源码(无打点)105.3error: 82, stopped_after_turn_patches: 185355575499941484812917
本地 release 镜像(未加密)91.8error: 77, stopped_after_turn_patches: 23347169138567076711801062
本地 release 镜像(PyArmor 加密)128.6error: 86, stopped_after_turn_patches: 14395110897120976138420451862

PyArmor 对比结论

在同一台本机、同一 mock LLM、同一 BO 认证路径下,PyArmor 加密镜像相对未加密镜像:总耗时 1.40x,chat p50 1.41x,health/models/sessions p50 分别为 1.81x1.73x1.75x。这说明加密运行时有明显额外开销。

chat p50 对比

本地源码(无打点)
99941
本地 release 镜像(未加密)
85670
本地 release 镜像(PyArmor 加密)
120976

三、BO PAT 校验单测

为排除 OAuth/BO 单点问题,额外直接请求 box BO 的 PAT 校验接口。结论是 BO 在高并发下会排队,但延迟量级整体小于 BA 压测中看到的阻塞。

测试并发延迟判断
单次请求1约 3.7ms验证服务本身空载很快
顺序 100 次1p50 4.7ms / p95 5.4ms稳定
1000 次,20 并发20p50 23ms / p95 438ms / p99 1.05s开始排队,但仍远低于 BA 卡顿量级
1000 次,100 并发100p50 157ms / p95 1.68s / p99 3.07s高并发下有排队
2000 次,200 并发200p95 3.11s / p99 5s,22 timeoutBO 有压力,但不足以解释 BA 全部卡顿

四、测试说明与限制

五、原始报告文件

对象路径探针状态
BA v1.0.4 镜像(box)/tmp/.json/api/config/models 200:7/401:35; /api/health 200:41/error:1; /api/sessions?limit=1 200:8/401:34
BA v1.0.7 镜像(box)/tmp/.json/api/config/models 200:35/401:32; /api/health 200:67; /api/sessions?limit=1 200:35/401:32
BA v1.0.9 镜像(box)/tmp/.json/api/config/models 200:37/401:21; /api/health 200:58; /api/sessions?limit=1 200:37/401:21
本地源码(带打点)/tmp/.json/api/config/models 200:98; /api/health 200:98; /api/sessions?limit=1 200:98
本地源码(无打点)/tmp/.json/api/config/models 200:80; /api/health 200:80; /api/sessions?limit=1 200:80
本地 release 镜像(未加密)/tmp/.json/api/config/models 200:71; /api/health 200:71; /api/sessions?limit=1 200:71
本地 release 镜像(PyArmor 加密)/tmp/.json/api/config/models 200:60; /api/health 200:60; /api/sessions?limit=1 200:60