‹ 返回笔记 · Back to notes

现场手记

我的 Mac 发热到飞起,真凶是个坏掉的 .git

My Mac Was Cooking — the Culprit Was a Broken .git

笔记本一开 Codex 就烫,syspolicyd 和 trustd 飙到 160%。我先怀疑 M4 Max、Computer Use、MCP、hook,挨个不是。真凶藏得很深:一个坏掉的 .git。前因后果、两台机器两个结果,以及它真正的危害——不是耗电,也不是读坏硬盘,是热。

CodexmacOS.git事故复盘public-safe

事故复盘 · macOS

最近笔记本(M4 Max)一开 Codex 就烫。不是温,是烫,风扇直接拉满。打开活动监视器一看,syspolicydtrustd 两个进程占用飙到天上——一个 160% 多,一个 60% 多。

我一开始全猜错了。怀疑过 M4 Max 功率本来就大、怀疑过 Computer Use、MCP、各种 hook。挨个排,挨个不是。

最后挖出来的真凶,藏得特别深:~/Documents/Playground/ 下面有个坏掉的 .git

它已经不是个正常仓库了。点进去,只有 objects/pack,HEAD、config、refs、index 一个都没有,还堆了大概 25G 的 tmp_pack_* 临时文件——一看就是某次 clone 或者 gc 跑到一半断了,留下的半成品。

为什么这玩意能把电脑烧热?

Codex(还有 Claude Code,一个道理)一打开工作区,就要先摸一下底:这是不是个 git 仓库、有没有改动、在哪个分支。正常仓库,摸一下就过去了。可我那个 .git 是残的。Codex 看见个 .git,就当这是仓库,一遍遍去调 git。git 一看没 HEAD 没 refs,一遍遍失败。关键在这——每起一个子进程,macOS 都要拉 Gatekeeper 过一遍:syspolicyd 查签名和安全策略,trustd 查证书信任。高频失败的 git 调用一摞起来,这俩安全守护进程就被打满了。

发热链路:Codex 打开工作区 → 探测 .git → 残缺 .git(无 HEAD/refs)→ git 反复失败 → 每个子进程触发 syspolicyd 签名检查 + trustd 信任评估 → 两个守护进程打满 → 发热

阴就阴在:前台 Codex 看着一点事没有,你压根不知道它在后台疯狂空转。所有的劲,都耗在你看不见的系统守护进程里。

我没一上来就删——先改名隔离,把 .git 重命名成 .git.invalid-…,把现场留住。改完几秒钟:syspolicyd 从 160% 掉到 0,trustd 从 60% 掉到 0,Codex 也正常了,机器肉眼可见地凉下来。确认是它之后,再删掉,顺手回收那 25G。

顺便我把另一台也查了。两台一样的配置,两个结果。

笔记本中招了。台式那台 Mac Studio——我整台扫了一遍,45 个多 .git 全是健康的,没有残缺仓库,没有 tmp_pack 残留,home 也没被人误 git。干净。所以这不是“Codex 就会让 Mac 发热”这种大话,是一个具体的、可复现的坑——你那个目录里恰好埋了颗雷,它才炸。没埋雷的机器,一点事没有。

再说危害。这事的危害比“费点电”大得多,但不是我一开始以为的那样。

我本来以为是“频繁读盘把硬盘读坏了”。查完发现这只是读取,对硬盘的损害确实不大。但是发现另外一个看不见的损坏——。热造成的不可逆的损害,远比频繁读取大多了。

这个热,熬的是这些:

  • 安全守护进程被打满,芯片就一直高温、风扇狂转、M 芯片降频。
  • 长期高温才是真正熬硬件的——尤其是电池,笔记本电池最大的杀手就是热。
  • 还连累整机:syspolicydtrustd 是公用的安全守护进程,它俩被打满,别的 App 要做签名校验也跟着排队,整台机器发黏。
  • 外加白白掉电、25G 垃圾占着盘。

所以这事我记三条:

  • 别让任何 AI 工具拿 ~ 或者一个巨大的父目录当工作区。它会去摸里面每一个 .git,里面只要有一个是坏的,就够它空转出汗。
  • 机器莫名其妙发烫,先看后台守护进程,别盯着前台那个 App。真正烧电的,往往是 syspolicydtrustdmds 这些你平时不看的东西。
  • 坏掉的东西,先隔离别急着删。改个名,看现象消没消失——消失了,才算抓对了凶手;再删也不迟。

一个残缺的 .git,不报错、不弹窗,前台安安静静,背地里把我的电脑当暖炉烧了好几天。

最坑的故障,从来都是这种——你看着一切正常的那种。

把这篇记录接到下一步

读完以后,可以继续追问这篇文章,也可以回到策展目录,或通过标签追同一条线索。

追问这篇 回到目录 浏览标签