Back
Featured image of post ChatGPT Crashpad 崩溃分析

ChatGPT Crashpad 崩溃分析

发现Codex占用了30多个GB的空间,排查了一下

1. 报告概况

  • 报告日期: 2026-10-09
  • 涉及应用: ChatGPT macOS 桌面应用
  • 涉及组件: browser_crashpad_handler(崩溃报告处理进程)
  • 检查目录: $HOME/Library/Application Support/Codex/Crashpad/pending/
  • 相关issue: https://github.com/openai/codex/issues/47466

2. 执行摘要

在 ChatGPT macOS 应用使用的 Crashpad 待处理报告目录中,发现异常规模的转储文件积累,目录占用约 30 GB。目录统计显示共有 344,006 个文件,其中 171,998 个 .dmp 文件,合计占用 28.900 GiB。文件主要集中形成于 2026-09-07 至 2026-09-15,2026-09-10 为目录文件增长峰值,当天新增 38,002 个 .dmp。

在已分析的 ChatGPT 相关样本中,发生异常的进程为 browser_crashpad_handler,即 ChatGPT 内置的 Crashpad 崩溃报告处理进程。相关样本指向同一类 macOS Mach 端口通知请求失败,随后触发程序内置的致命检查。

统计口径说明: 上述文件数、体积和每日新增量是 Crashpad 目录层面的统计,不是逐份核验后的 ChatGPT 进程崩溃次数。因此,本报告不将全部 171,998 份 .dmp 等同于已确认的 ChatGPT 崩溃,也不据此断言每份文件的来源。

3. 目录统计与时间分布

统计项目 检查结果
待处理报告目录占用 约 30 GB
目录总文件数 344,006
.dmp 转储文件数 171,998
.dmp 文件总大小 28.900 GiB
.json 元数据文件数 172,008
.json 文件总大小 约 3.9 MiB
报告文件增长主要集中期 2026-09-07 至 2026-09-15
单日 .dmp 增量峰值 2026-09-10:38,002 份

在目录增量峰值日,按全天 24 小时计算,平均约每小时生成 1,583 份转储文件,折合约每 2.3 秒生成一份。该速度体现的是报告目录增长频率,不能直接视为已确认的 ChatGPT 主进程崩溃频率。

检查时,pending 目录积累了大量待处理文件,而 completed 目录为空。这表明报告未在检查时形成可见的已完成归档记录;仅凭这一点,尚不能确认具体的上传失败原因。

4. ChatGPT Crashpad 崩溃样本分析

已确认的 ChatGPT Crashpad 样本记录了以下进程:

ChatGPT.app / Codex Framework / Helpers / browser_crashpad_handler

样本中的关键错误信息为:

FATAL: third_party/crashpad/crashpad/handler/mac/exception_handler_server.cc:76
Check failed: kr == KERN_SUCCESS.
mach_port_request_notification: (os/kern) invalid capability (20)

该信息说明,Crashpad 在 macOS 异常处理服务中调用 mach_port_request_notification 时,收到 invalid capability (20) 错误;随后,程序对 KERN_SUCCESS 的检查失败并触发致命终止。

所分析的 ChatGPT Crashpad 样本具有相同的关键错误签名,说明存在可重复出现的同类型故障。但转储证据尚不足以确定最初的 Mach 端口状态为何不满足请求条件,也不能仅凭这些样本证明 ChatGPT 主应用在每次报告生成时都同步退出。

5. 故障机制初步判断

从错误内容和目录增长规模来看,较为合理的解释是:ChatGPT 内置的 Crashpad 处理进程发生异常终止后,在重新启动或被监控的情况下再次遇到相同错误,从而造成反复生成转储报告的现象。

可能的过程如下:

  1. ChatGPT 的 Crashpad 处理进程启动或执行异常监控工作。
  2. 进程请求 macOS Mach 端口通知,系统返回 invalid capability (20)。
  3. Crashpad 内部致命检查失败,处理进程终止。
  4. 若处理进程被重新启动或被再次监控,便可能重复触发故障,持续积累待处理报告。

证据边界: 样本可以直接支持错误位置与失败类型;关于“自动重新启动、循环生成”的具体触发机制属于结合统计现象作出的推断,仍需进程日志或稳定复现来验证。

Built with Hugo
Theme Stack designed by Jimmy