# 当前线上最终 Runbook 最后更新:2026-04-26 18:12 左右 适用节点:`mainland-controller-01` 这份文档的目标很简单: 后面不再靠聊天记录回忆,也不在多份文档里来回翻。 只看这一份,就知道: 1. 当前线上到底跑在什么基线上 2. 现在先看什么数 3. 什么情况继续观察 4. 什么情况才值得继续动刀 ## 1. 当前结论 当前这套线上方案,已经从: - 线程忙但不出结果 推进到了: - 线程忙,同时持续产出 `completed` 所以现在的正确策略不是继续乱改参数,而是: **先稳住,先观察,确认这套已经验证有效的配置能不能持续出结果。** ## 2. 当前线上基线 ### 当前基底版本 - `current` 指向: `/opt/domaincheck/releases/domaincheck_release_20260424_220158` 说明: - 当前不是纯旧 release 原样运行 - 真实线上状态是: `220158 基底 + 多轮已热补代码 + 已生效 env` ### 当前服务状态 - `domaincheck-worker.service = active` - `domaincheck-sync-agent.service = active` - `domaincheck-api.service = active` ## 3. 当前已确认生效的关键参数 这些参数是**已经在运行进程环境里确认过**的,不是只改了文件。 ### 单机性能与爱站相关 - `DOMAINCHECK_REGISTER_SINGLE_MACHINE_MODE=1` - `DOMAINCHECK_SINGLE_MACHINE_AIZHAN_DIRECT_FIRST=1` - `DOMAINCHECK_AIZHAN_REMOTE_DISCONNECT_DEGRADE=1` - `DOMAINCHECK_AIZHAN_EXTERNAL_FAST_DEGRADE=1` - `DOMAINCHECK_PROXY_STEP_MAX_ATTEMPTS_AIZHAN=2` - `DOMAINCHECK_PROXY_STEP_MAX_SECONDS_AIZHAN=10` - `DOMAINCHECK_AIZHAN_TIMEOUT_PROXY=1.8` - `DOMAINCHECK_AIZHAN_TIMEOUT_DIRECT=2.4` ### Wayback 相关 - `DOMAINCHECK_PROXY_STEP_MAX_ATTEMPTS_WAYBACK=2` - `DOMAINCHECK_PROXY_STEP_MAX_SECONDS_WAYBACK=8` - `WAYBACK_CDX_TIMEOUT=3` - `WAYBACK_SNAPSHOT_TIMEOUT=2` - `WAYBACK_RETRY_COUNT=1` - `WAYBACK_DOMAIN_CONCURRENCY=1` - `WAYBACK_MAX_RECORDS=2` - `WAYBACK_TRANSIENT_BACKOFF_SECONDS=0.5` ## 4. 当前已确认上线的代码方向 ### 调度 / 分发侧 - 预补货提前触发 - 预补货时不再让补货 worker 先独吞下一批 - `pipeline` 推进和主动 `pull_tasks` 做了共享锁 - `session_replaced -> queued_before_start` 这条重复唤起链已压住 - `claim / finalize / release` 这些本地 DB 重链已经做过减重 ### 外部步骤侧 - 注册检测保留单机性能模式 - 百度、360、爱站都不再是早期那套过于激进的超时口径 - `爱站` 当前已经具备: - 首轮可直连优先 - `RemoteDisconnected` 可直接降级 - 外部依赖异常可快速降级继续 - `wayback` 当前已经具备: - `latest_cdx` transient 时不再硬打额外 `records_cdx` - backoff 已收短 - 主要剩下 `web.archive.org` 本身慢/拒绝连接 ## 5. 当前已经验证出来的效果 ### 5.1 机器已经真正吃起来 已观察到: - `60` 个节点全在线 - 多次快照里 `51 ~ 56` 个 worker 有真实线程 - 真实线程和长期在 `3.8 万 ~ 4.2 万` 所以当前不是“进程活着但没干活”,而是确实在跑。 ### 5.2 内存高位问题先被压下来 滚动重启释放旧 RSS 后,现场出现过一轮明显回落: - `Mem used ≈ 31Gi` - `available ≈ 93Gi` - `60` 个 worker 总 RSS ≈ `23.9Gi` 说明“旧 RSS 不退”这层已经先被压住。 ### 5.3 当前真正最重要的验证结果 观察窗:`2026-04-25 17:17:18` 到 `17:29:23` - `completed_total: 50786 -> 51298`,净增 `512` - `aizhan_completed: 7718 -> 7936`,净增 `218` - `wayback_completed: 3068 -> 3362`,净增 `294` - 这段窗口里: - `aizhan_failed = 0` - `wayback_failed = 0` 这说明: - 现在已经不是“压住 failed,但 completed 不动” - 而是“failed 被压住,同时 completed 持续增长” ## 6. 当前最该看的数 后面观察时,优先级固定按这个顺序: 1. `completed_total` 2. `aizhan_completed` 3. `wayback_completed` 4. `aizhan_failed` 5. `wayback_failed` 6. `running / claimed / pending` 顺序不要反过来。 原因: - `claimed / pending` 在 `domain_pipeline` 下天然会波动 - `completed` 才是最真实的产出 ## 7. 当前正确的判断方法 ### 7.1 什么叫“继续观察就行” 只要看到下面这种趋势,就先不要再改: - `completed_total` 持续增长 - `aizhan_completed` 持续增长 - `wayback_completed` 持续增长 - `aizhan_failed / wayback_failed` 维持低位或归零 这说明: - 当前主链是通的 - 当前配置方向是对的 - 现在最应该做的是稳住,不是继续乱调 ### 7.2 什么叫“又卡住了” 只有出现下面这些情况,才值得继续下刀: #### 情况一 `completed_total` 在 `30 ~ 60` 分钟窗口里基本不动 说明: - 虽然线程在跑 - 但结果没有真正落地 #### 情况二 `aizhan_failed` 或 `wayback_failed` 又明显抬头 说明: - 当前“快速降级继续”的策略还不够稳 #### 情况三 `running` 长时间很高,但 `aizhan_completed / wayback_completed` 不再增长 说明: - 新的主瓶颈又出现了 ## 8. 当前建议观察窗口 建议至少继续看 `30 ~ 60` 分钟。 正确做法: 1. 记录一组起始值 2. 每隔 `10 ~ 15` 分钟看一次 3. 至少看 `3 ~ 4` 个点 不要只看一两个瞬间。 ## 9. 当前先不要再碰的东西 在这轮观察结束前,先不要继续改: - worker 进程数 - 每进程线程数 - claim 批量 - backlog 批量 - 爱站超时 - wayback 超时 - 其他步骤的重试窗口 原因很简单: - 现在已经进入“开始稳定产出”的阶段 - 再频繁改参数,只会把已经验证有效的窗口打碎 ## 10. 当前一句话执行原则 **先稳住,先看 `completed` 能不能持续增长;只要结果还在持续出来,就先不要再乱改。** ## 11. `job 876` 尾项释放的当前判断 观察时间:`2026-04-26 18:12` 左右 当前不是“又卡死了”,而是: - `idx_detect_job_items_release_node_job` 还没转成 `valid=1` - 但它已经稳定进入 `index validation: scanning table` - 最新验证进度已经到 `229991 / 6197384` `codex-job876-tail-watch.service` 这条后台链当前是活的,而且在连续记进度: - `18:09:51 -> 126725` - `18:10:52 -> 169564` - `18:11:52 -> 210067` - `18:12:22 -> 227856` 同时现场另外两组状态也正常: - `job 876 = running` - worker 已恢复到: - `base=active` - `templated=199` - `node_agent=active` 这次现场更准确的判断应该是: - 已经从“卡住”切成“后台验证扫描中” - 当前最合理的动作不是再人工乱动 - 应该继续让索引自己扫完 一旦 `idx_detect_job_items_release_node_job` 转成 `valid=1`,`codex-job876-tail-watch.service` 就会自动继续释放 `876` 的尾项。 ## 12. 如果后面还要继续优化,下一刀顺序 只有在更长观察窗口里确认又卡住时,才按这个顺序继续: 1. 先看 `completed_total` 为什么不涨 2. 再看 `aizhan_completed / wayback_completed` 哪个先停 3. 再决定是继续打外部链,还是回头查回写 / 聚合语义 不要一上来就回去改线程、claim、并发。