现象
生产升级验收通过 PM2 进程树确认 worker 时,若读取 pm2 jlist 的 pm2_env.pid 或 _tree_pids,会把健康服务误判为 worker 未启动:前者可为 null,后者可能残留上一次 restart 的已退出 PID,进而触发错误回滚。
证据
来源:agent-config#139。
- 目标版本
f622162 日志记录 3 个 worker 启动、ready、模型池初始化成功;
- 只读复核确认真实 app PID 位于
pm2 jlist 条目顶层 pid;
_tree_pids 在回滚后仍保留上一目标版本 PID,不能作为当前态证据。
期望行为
- PM2 app PID 只读取条目顶层
pid;
- 不使用
pm2_env.pid 或 _tree_pids 作为当前进程树真相;
- worker 门禁使用 PPID 直属关系、命令/worker 身份、非 zombie 与 ready/健康证据联合判定;
- 门禁失败时 fail-loud,并保留应用启动日志证据,避免假阴性静默触发回滚。
验收
在 PM2 管理的多 worker 服务上连续重启两次,验收仍只识别当前 app 的直属 worker,不命中旧 _tree_pids,也不误算 PPID=1 的孤儿 worker。
追踪来源:https://github.com/zj1123581321/agent-config/issues/139
现象
生产升级验收通过 PM2 进程树确认 worker 时,若读取
pm2 jlist的pm2_env.pid或_tree_pids,会把健康服务误判为 worker 未启动:前者可为 null,后者可能残留上一次 restart 的已退出 PID,进而触发错误回滚。证据
来源:agent-config#139。
f622162日志记录 3 个 worker 启动、ready、模型池初始化成功;pm2 jlist条目顶层pid;_tree_pids在回滚后仍保留上一目标版本 PID,不能作为当前态证据。期望行为
pid;pm2_env.pid或_tree_pids作为当前进程树真相;验收
在 PM2 管理的多 worker 服务上连续重启两次,验收仍只识别当前 app 的直属 worker,不命中旧
_tree_pids,也不误算 PPID=1 的孤儿 worker。追踪来源:https://github.com/zj1123581321/agent-config/issues/139