Skip to content

Perf observability: realtime telemetry (SQLite-backed), web panel page, FULL/nightly CI bench gates #5460

Open

Description

@ranxianglei

性能可观测系统(实时收集 + Web 面板 + 全量/夜间 CI 门禁)

跟踪单。背景:近期所有性能事故(#5403 OOM×6、#4528 slow-session、#5385 cache 钉前缀、#5449 孤儿进程 51% CPU)全部由用户先发现,CI 零预警。目标=让性能回归在代码合并前可见、跨版本可对比、30 秒可复现。owner 已确认方向与约束(2026-11-01)。

硬约束(owner 拍板)

  1. 元数据只进 SQLite/数据库模式(现有 unified store 连接,新表);不再用 JSON 文件存。
  2. 纯 JSON 存储模式冻结/废弃:不新增任何维护,本系统对其零埋点;废弃收尾(迁移指引、legacy-only 降级路径的告警化)另立子任务(关联 Known-but-wedged same-lane peer: replacement loses unified storage for its whole life and the panel misclassifies the stuck instance | 已知但卡死的同车道实例:接替实例整个生命周期丢失统一存储,面板状态误导 #5451)。
  3. Web 面板必须有性能观测页(不是可选)。
  4. CI:普通(PR)CI 一律不跑 perf;全量(FULL)CI 跑;夜间定时也跑。复用既有 FULL 触发机制,不自造新触发。

L1 实时采集(只写库,零新依赖)

L2 场景夹具(每个角落,确定性种子)

生成器提交、大数据不入库:gen-perf-fixture --seed K --msgs N --shape X:S-small(50)/S-med(2k)/S-large(2万条≈80MiB,复刻 #5403 形状)× 形状变体 × 折叠状态(未折叠/折一半/闸门卡死态)× 行为脚本(追加/频繁 Esc/压缩密集/冷重启 churn/Windows EPERM 模拟)。纯合成数据,零隐私面。

L3 bili bench + 基线 ratchet(只在 FULL/夜间跑)

  • bili bench <scenario>:起真实 server(XDG/端口隔离,复用 e2e-dsh hermetic 手法)→ 吃库出报告(p50/p95/HWM/命中率/闸门推迟次数)→ --baseline x.json 相对容差带判回归(3 轮中位数抗抖动)。
  • 基线文件进仓库 + 重生成脚本 + 守卫(金样同构文化:合法改变性能的 PR 必须带说明更新基线);抖动指标隔离名单观察后再入门禁。
  • 覆盖矩阵:模式(dsh 插件全量重发/pure-proxy/多会话并发/中断密集/压缩密集/Windows 冷重启)× 形状 × 存储后端(sqlite/mysql)× 开关(timestamps/fastpath/lazy-store)。PR 级 0 个 perf job。

L4 观测面

路线图(自包含 PR)

Activity

  1. ranxianglei commented on Nov 1, 2026

    @ranxianglei
    OwnerAuthor

    P1 已交付:PR 见上条链接(分支 perf/l1-sqlite-telemetry)。落库=每请求一行+30s 内存采样,WAL+200k 行保留窗;JSON 模式冻结零足迹;写失败只停采集不碰服务。P2(夹具+bili bench)下一步。

  2. added 9 commits that reference this issue on Nov 1, 2026
    9438e41
    e6eb5e2
    1d792f8
    3f77f22
    174d791
    26c9b1e
    2759581
    4548676
    f05e6e8
  3. ranxianglei commented on Nov 1, 2026

    @ranxianglei
    OwnerAuthor

    🤖 Powered by ework · qwen3.8-27b

    (ai: vllm/qwen3.8-27b)

    P2 已交付:PR #5477(分支 perf/l2-bench-fixtures,stacked on #5461,P1 先合)。另外在 P1 分支上顺手修了一个评审发现的启动级缺陷(commit f05e6e8,已推到 perf/l1-sqlite-telemetry,归 #5461)。

    标签:scope/storage + p3(主载体是 perf.sqlite 遥测存储与基准工具面,面板/CI 门禁是同系统消费端;p3=增强项,无用户侧破坏)。
    查重:不重复——本单即跟踪单自身路线图的既定步骤,无平行条目。

    八问

    1. 是什么问题:非缺陷,是路线图执行项——跟踪单要求性能回归「合并前可见、跨版本可比、30 秒可复现」,P2 负责提供确定性夹具与只记录的基准测量工具。
    2. 什么原因导致的:不适用(功能项)。但工作中发现一个真实缺陷(P1 引入、未发布):perf.sqlite 在模块顶层静态 import "node:sqlite"——该内置模块 Node ≥22.5 才有,而 package.json 仍声明 engines >=20,静态导入让整个 CLI 在老 Node 上模块加载期崩溃(不可用的是全部 bili,不只是遥测),且会挂 dist 自包含门禁。
    3. 影响范围与严重程度:P2 本体零用户影响(全新子命令+新文件,既有路径一行未动)。C1 修复影响所有 Node <22.5 的 P1 潜在用户——不修则装到 P1 后 bili 完全无法启动(p1 级),但 P1 未发布,尚无实际受害者。
    4. 怎么修复的:两条线。C1:perf.sqlite 改走与 index.db 同一条引擎解析链(openSqliteDatabase:builtin node:sqlite → 宿主 better-sqlite3 → 自下载,彻底解决 dsh/pnpm 构建脚本门导致 build-blocked:SQLite 引擎自举(内置优先 → 运行时自下载 → 复用宿主) #2833/feat: SQLite engine self-bootstrap — builtin -> host -> cached -> self-download (#2833) #2845),零新增外部依赖,全缺时按既有契约一次性警告、只降级停用遥测。C2/C3:bili fixture-gen(参数当纯函数,同 seed 字节级相同,内容带哨兵值/doc# 引用保证压缩触发时摘要仍确定;S-small 50/S-med 2k/S-large 2万条≈80MiB 复刻 [Bug][dsh] 20k-message / 81 MiB-inbound session: host aborted 6× in 2 h — the #3050 resident-AST OOM is not bounded by sessions.hardMaxBytes (Windows, 0.1.210) #5403 形状)+ bili bench <scenario>(一次性 XDG 目录+随机端口拉起真代理,进程内确定性假上游双 wire,按 dsh 插件车道全量重发形状逐回合回放,结束后读子进程 perf.sqlite 出 p50/p95/max/mean+进出站字节+内存 HWM 的 JSON 工件;只记录不判——指标再慢也 exit 0,只有 harness 失败才 exit 1)。
    5. 是否有回归问题:审过的既有行为:CLI 参数解析面(cli-parseargs 7/7)、P1 遥测套件(20/20,C1 对其透明)、构建门禁(dist 自包含/typecheck/build 全绿)、请求热路径零触碰(bench/fixture-gen 是新子命令)。行为变更披露(旧→新):Node <22.5 上从「CLI 启动即死」(P1 静态导入引入,未发布)回到「正常启动」;宿主装有 better-sqlite3 时遥测改用它而非硬依赖 Node 内置。
    6. 是否破坏缓存:不涉及(未触碰任何缓存/重试/游标/去重键逻辑)。
    7. 是否改了设计方向:无。两点执行映射说明:①OP 命名的 gen-perf-fixture 落成 bili fixture-gen 子命令(单 bin 打包形态,零打包变更,随 dist/index.js 发布);②折叠状态轴(未折叠/折一半/闸门卡死)与频繁 Esc/冷重启 churn 行为脚本留待 P3 矩阵——真正预置折叠态需要持久化状态注入,不在 P2「只记录」范围内硬造。
    8. 是否引入了新的配置:无。全部旋钮为 CLI flag(--seed/--msgs/--shape/--out/--rounds/--keep-workdir/--dist),无新 env、无新 config 字段(BILI_PERF_TELEMETRY 属 P1 面)。

    验证(本地定向,全量交 CI):typecheck+build(含 dist 门禁)绿;tests/issue5460-perf-bench.test.ts 9/9 + 门控 e2e smoke 1/1;P1 套件 20/20;cli-parseargs 7/7。实测 bili bench proxy-append-openai-s-small:50 回合 0 失败,req_rows=50,total_ms p50=5ms p95=9ms(max 2725ms=首轮冷启动),进站 5.3MB。

    判定:P2 交付完毕,PR #5477 等 CI 结果;合并顺序 #5461 先行、#5477 跟进(P1 合入后本 PR 的有效增量即 feat+test 两个 commit)。噪声底静默收集一周后进入 P3(容差带+ratchet+FULL/夜间接线)。

  4. 22 remaining items

  5. added 15 commits that reference this issue on Nov 10, 2026
    4aaee18
    2ecbd77
    9555b61
    7612f79
    99ae036
    be68cd4
    451d0b1
    fe3e2fb
    a2b2dfc
    7f246de
    09df20f
    767b658
    75bfbb9
    af8c434
    09d2cd2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions