docs: 固化无归属 Chrome 精确终止流程

This commit is contained in:
Codex
2026-07-13 06:59:10 +02:00
parent 71e59829aa
commit ccfb202b0e
2 changed files with 59 additions and 4 deletions
+27 -1
View File
@@ -105,7 +105,33 @@ JD01 增长降速 policy 由 `gc remote JD01 policy plan|install|status` 管理
JD01 Web observe artifact 是一等 GC 对象。state root 必须来自 YAML;候选按 run 聚合并读取 `manifest.json``heartbeat.json``pid`、report sha 和 top files。年龄判定以 manifest/heartbeat 的 started/completed/updated 字段、pid 存活和打开 fd 检查为准,不以目录 mtime 为唯一依据,因为手动 GC 或目录遍历可能刷新 mtime。active run、pid alive、open fd、未生成必要 report 的 run 均为 protected。safe 候选只覆盖超过 YAML retention 且可重建的 raw samples、browser-process、network/trace、screenshot 等大 artifact;长期保留 report summary、report json/md、最终截图或诊断摘要由 YAML cap/retention 策略控制。
JD01 Chrome 内存治理应优先管理 observer runner 生命周期,而不是孤立清理 Chrome 进程。Web probe sentinel 和 quick-verify 启动 observer 后,所有终态路径(成功、blocked、失败、timeout、异常)都必须执行 YAML 控制的 `web-probe observe stop`/force stop 流程,并验证对应 runner/Chrome process tree 退出;observe runner 自身也必须从 scenario/YAML 获得最大运行时长或 max samples 兜底,即使调用方退出也会停止采样并关闭 browser。browser freeze policy 只能作为异常保护,不替代正常任务生命周期结束后的 stop。
### Web observe 与 Chrome 逃逸进程
- 正常生命周期:
- Chrome 内存治理优先管理 observer runner 生命周期;
- Web probe sentinel 和 quick-verify 启动 observer 后,全部终态都必须执行受控 stop;
- 全部终态包括成功、blocked、失败、timeout 和异常;
- stop 流程由 YAML 控制,并使用 `web-probe observe stop`/force stop
- stop 后必须验证对应 runner 与 Chrome process tree 已退出;
- observe runner 必须从 scenario/YAML 获得最大运行时长或 max samples 兜底,即使调用方退出也会停止采样并关闭 browser;
- browser freeze policy 只能作为异常保护,不能替代正常终态 stop。
- 逃逸判定:
- 长时间存活的 Playwright `cliDaemon`/Chrome 进程树是高度可疑对象;
- 存活窗口必须来自 owning YAML,不能写成脚本隐藏默认;
- 必须先证明该进程树不属于 active observer 或其他在途受控任务;
- 归属证据包括受控 observe/sentinel 状态、manifest、heartbeat、PID/session 记录和完整 process tree
- PID、PPID、session/process group 和后代进程不能闭合为唯一进程树,或任一归属证据存在歧义时,继续标记 protected;
- 只有证据闭合的无归属进程树才能分类为 `suspected-orphan-browser`,并直接进入精确终止流程。
- 精确终止:
- 先结构化记录 session、root PID、后代 PID、命令摘要、存活时间、归属判定和终止前的 `MemAvailable`/swap
- 只向已核实的 session/process tree 发送 TERM,并按 YAML 定义的有界等待时间复核;
- TERM 后仍存活时,重新确认残留 PID 仍属于同一棵树,再仅向这些残留进程发送 KILL;
- 禁止使用 `pkill -f chrome``killall chrome` 或任何按 `chrome`/`chromium` 名称批量终止的入口。
- 收口验证:
- 目标 root PID、全部后代 PID 和 session/process group 必须为空;
- 受控 observe/sentinel 状态必须确认 active observer 未受影响;
- 必须重新采集 `MemAvailable`、swap、Chrome/observer process summary 和 web-observe 状态;
- 结果必须结构化记录分类、归属证据、TERM/KILL 动作、残留 PID、终止前后资源数据和复核结论。
JD01 plan 和 status 应同时披露内存压力摘要:active observer 数、Chrome process 数、Chrome RSS、stale observer 数、state root artifact bytes、last cleanup、last stop failure 和 drill-down 命令。GC run 只能执行 plan 中明确标记 safe 的低风险动作,例如 apt/journal/tmp allowlist、dead web-observe raw artifact retention,以及通过受控 observe stop 处理 stale observer;对 PVC、k3s runtime、containerd、Docker volume、Secret 和 auth/config 状态一律保持 protected 或转交专用 retention 入口。