Skip to content

P0 SR 黑屏 / 卡顿 / 自杀根因 ​

这不是一个单点 crash,而是一条连续的事故链:内存泄漏 → 渲染线程卡死 → Unity watchdog 触发自杀。

P0 根因链

事故等级P0
复现方式2h 台架
关键阈值20s 卡死

背景 ​

2026 年 4 月,610 版本线上出现 SR 黑屏、明显卡顿和 Unity 进程异常终止。单看每个症状,它们像是三个问题:画面黑、帧率低、进程自杀。但线上事故处理不能按现象拆碎,必须找到一条能解释全部症状的根因链。

现象 ​

现象用户感知工程风险
SR 黑屏画面偶发不可用渲染链路中断
明显卡顿帧率从 60fps 掉到 10fps 以下主体验受损
进程自杀Unity 进程异常退出稳定性事故

排查过程 ​

1. 排除表面假设 ​

假设验证结论
GPU 驱动问题多设备复现不是单设备驱动
特定场景触发随机场景出现非固定场景
网络数据异常离线也能复现非网络根因

2. 台架复现 ​

人工排查很难稳定抓到现场,因此改用台架长时间自动测试。连续跑约 2 小时后复现,再拉 trace 和日志分析。

3. 串起根因链 ​

mermaid
flowchart TD
    A[大纹理未及时释放] --> B[内存持续上升]
    B --> C[渲染线程等待 GPU 资源释放<br>卡死约 20 秒]
    C --> D[Unity watchdog 判定<br>渲染线程不可恢复]
    D --> E[触发进程自杀保护]
    B -.表现为.-> F[卡顿 60fps → 10fps-]
    C -.表现为.-> G[SR 黑屏]

这条链路同时解释黑屏、卡顿和自杀:黑屏是渲染不可用的表现,卡顿是资源等待的过程,自杀是 watchdog 的保护结果。

修复方案 ​

紧急止血 ​

  • 定位泄漏的大纹理对象,补显式释放逻辑。
  • 对渲染线程卡死风险增加降级策略,例如降低分辨率、关闭部分后处理。

长期防线 ​

  • 建立内存预警:内存超过阈值时主动降级。
  • 建立线上 record:用环形 buffer 记录事故前后关键事件,便于复盘。
  • 将 crash、卡顿、内存、渲染状态纳入统一监控链路。

产出 ​

  • P0 事故根因链。
  • 台架自动复现路径。
  • 紧急修复方案和长期治理方向。
  • 后续稳定性治理的监控口径。

可复用方法论 ​

  1. P0 事故要先找能解释全部症状的链路。
  2. 不能稳定复现时,优先搭自动化场景,而不是继续猜。
  3. watchdog 自杀通常是保护结果,根因要往上游资源链路找。
  4. 复盘产物必须转成监控和发布标准,否则下次还会靠人肉经验。

复盘 ​

这篇案例后续还需要补充脱敏后的 trace 分析图、内存趋势图和降级策略表。当前版本只保留公开可描述的方法论和已在原文出现的关键数字。

罗子初 · AI 座舱专家 · 8年端侧研发

Lv.1