|
| 1 | +--- |
| 2 | +title: 你的 SSD 还在流血吗?盘点近期 Codex 那些让人头疼的 Bug 及其终极拯救指南 |
| 3 | +date: 2026-06-22 |
| 4 | +updated: 2026-06-22 |
| 5 | +tags: |
| 6 | + - Codex |
| 7 | + - OpenAI |
| 8 | + - Bug 修复 |
| 9 | + - macOS |
| 10 | + - SSD |
| 11 | + - 开发工具 |
| 12 | +categories: |
| 13 | + - [gallery] |
| 14 | +featured_image: /gallery/codex-annoying-bugs/cover.jpg |
| 15 | +author: chenli |
| 16 | +description: 从每天写入 1.76TB 日志谋杀 SSD,到每次启动留下近 1GB 幽灵目录——Codex 近期 Bug 汇总与终极急救方案 |
| 17 | +--- |
| 18 | + |
| 19 | + |
| 20 | + |
| 21 | +如果你是一位开发者,且最近正在重度依赖 OpenAI 的 Codex 桌面端或 CLI 工具,那么你可能需要停下手头的工作,立刻检查一下你的硬盘剩余空间和 SSD 写入量了。 |
| 22 | + |
| 23 | +近段时间,Codex 频繁曝出多个严重影响系统性能和硬件寿命的 Bug。从疯狂吞噬磁盘空间的"克隆大军",到每天写入近 2TB 数据"谋杀" SSD 的日志风暴,这些问题不仅让人心惊肉跳,更在开发者社区引发了广泛的讨论。 |
| 24 | + |
| 25 | +本文将按时间顺序梳理近期 Codex 暴露出的核心 Bug,强调其严重性,并逐一展开详细分析,最后为你提供一套行之有效的综合解决方案。 |
| 26 | + |
| 27 | +## 近期 Codex 核心 Bug 概览 |
| 28 | + |
| 29 | +在我们深入技术细节之前,先来看看近期 Codex 到底惹了哪些祸: |
| 30 | + |
| 31 | +| Bug 类型 | 影响平台 | 严重程度 | 核心症状 | 发现时间 | |
| 32 | +| :--- | :--- | :--- | :--- | :--- | |
| 33 | +| **SSD 寿命刺客** | macOS Desktop, Linux CLI | 🔴 极高 | 每天写入 1.76TB 日志,极速消耗 SSD 寿命 | 近期反馈 | |
| 34 | +| **克隆大军** | macOS Desktop | 🔴 极高 | 每次启动/退出留下近 1GB 目录,最高累计超 125GB | 2026年6月 | |
| 35 | +| **Crashpad 转储膨胀** | macOS Desktop | 🟡 中等 | 每天产生约 5GB 的崩溃转储文件 | 2026年6月 | |
| 36 | +| **僵尸进程与系统卡顿** | macOS Desktop | 🟡 中等 | 退出后遗留大量辅助进程,导致 HID 延迟 | 2026年6月 | |
| 37 | + |
| 38 | +正如你所见,这些 Bug 并非无关痛痒的 UI 错位,而是实打实地在消耗你的硬件资源。接下来,我们将逐一拆解这些问题,并给出相应的急救措施。 |
| 39 | + |
| 40 | +--- |
| 41 | + |
| 42 | +## 深入分析与急救措施 |
| 43 | + |
| 44 | +### 1. SSD 寿命刺客:每天 1.76TB 的"慢性谋杀" |
| 45 | + |
| 46 | +这可能是近期最让人后怕的一个 Bug。有开发者在社区反馈,Codex 应用可能因为某些异常,频繁写入 TRACE 级别的日志。这种行为会将日志持久化到本地 SQLite 数据库中,然后再进行删除 [1]。 |
| 47 | + |
| 48 | +**恐怖的数据**:有用户发现,自己在短短 21 天内,固态硬盘的写入量达到了惊人的 37TB,平均每天写入 1.76TB。要知道,常见的 1TB 消费级固态硬盘(如官方标准 600TBW),按照每天写入 100GB 计算,大约需要 16 年才能报废。但在 Codex 的这种"摧残"下,仅需 11 个月就会达到 TBW 限额,导致硬盘过保甚至进入只读模式。 |
| 49 | + |
| 50 | +**技术根源**:Codex 在启动后,会持续向用户目录下的 SQLite 数据库(如 `~/.codex/logs_2.sqlite`)写入数据。据观察,在模型流式输出期间,写入速率约为 5 MiB/s,峰值甚至可达 16 MiB/s。更糟糕的是,即便你设置了 `RUST_LOG=warn` 环境变量,它依然我行我素,继续持久化大量低价值的 TRACE 级别日志。 |
| 51 | + |
| 52 | +**急救方案**:如果你发现自己的 `logs_2.sqlite` 文件异常庞大,或者观察到持续的高频写入,你可以通过 SQLite 触发器来阻止新日志的插入。这种方法简单、可逆,且对 SSD 极其友好。 |
| 53 | + |
| 54 | +在完全退出 Codex 后,执行以下命令: |
| 55 | + |
| 56 | +```bash |
| 57 | +# 阻止新日志插入 |
| 58 | +sqlite3 ~/.codex/logs_2.sqlite "CREATE TRIGGER IF NOT EXISTS block_log_inserts BEFORE INSERT ON logs BEGIN SELECT RAISE(IGNORE); END;" |
| 59 | + |
| 60 | +# 验证是否生效(看到 block_log_inserts 即代表成功) |
| 61 | +sqlite3 ~/.codex/logs_2.sqlite "SELECT name, tbl_name, sql FROM sqlite_master WHERE type='trigger';" |
| 62 | +``` |
| 63 | + |
| 64 | +如果你的硬盘空间已经捉襟见肘,还可以顺手清理一下历史日志: |
| 65 | + |
| 66 | +```bash |
| 67 | +# 备份原数据库(以防万一) |
| 68 | +cp ~/.codex/logs_2.sqlite ~/.codex/logs_2.sqlite.bak |
| 69 | + |
| 70 | +# 清空日志并回收空间 |
| 71 | +sqlite3 ~/.codex/logs_2.sqlite "DELETE FROM logs;" |
| 72 | +sqlite3 ~/.codex/logs_2.sqlite "VACUUM;" |
| 73 | +``` |
| 74 | + |
| 75 | +如果日后需要恢复日志写入(例如向官方提交 Bug 报告需要日志),只需执行: |
| 76 | + |
| 77 | +```bash |
| 78 | +sqlite3 ~/.codex/logs_2.sqlite "DROP TRIGGER IF EXISTS block_log_inserts;" |
| 79 | +``` |
| 80 | + |
| 81 | +### 2. 克隆大军:每次启动"白嫖" 1GB 空间的幽灵 |
| 82 | + |
| 83 | +在 GitHub Issue #25667 中,开发者 yorhasaber 爆出了另一个令人窒息的 Bug [2]。每次启动并退出 Codex macOS 应用时,系统都会在 `/private/var/folders/.../X/com.openai.codex.code_sign_clone/` 目录下留下一个约 965MB 的新目录。 |
| 84 | + |
| 85 | +**失控的膨胀**:这些目录在应用退出后并不会被自动清理,只有在重启 macOS 时才会被系统回收。随着启动次数的增加,这些"克隆体"会不断累积。社区中的反馈触目惊心: |
| 86 | + |
| 87 | +- 7 个克隆目录 = 6.5 GB |
| 88 | +- 16 个克隆目录 = 16 GB |
| 89 | +- 104 个克隆目录 = **130 GB** |
| 90 | +- 最严重案例:**125 GB** 的磁盘空间就这样悄无声息地消失了 |
| 91 | + |
| 92 | +更让人哭笑不得的是,当用户尝试用第三方清理工具卸载 Codex 时,工具会将这些幽灵目录也算进 Codex 的"体积"里,显示 Codex 占用了 150GB 以上的空间,让不明真相的用户误以为是清理工具出了问题。 |
| 93 | + |
| 94 | +**技术根源**:这个问题与 Chromium 的 `MacAppCodeSignClone` 机制有关。克隆的创建本身是预期行为,但不活跃的克隆目录在应用退出后未能被正确清理,代码签名克隆清理助手未被正确触发。 |
| 95 | + |
| 96 | +**急救方案**: |
| 97 | + |
| 98 | +首先,你可以用以下命令检查问题的严重程度: |
| 99 | + |
| 100 | +```bash |
| 101 | +# 查看克隆目录数量 |
| 102 | +find /private/var/folders/*/*/X/com.openai.codex.code_sign_clone \ |
| 103 | + -maxdepth 1 -type d -name 'code_sign_clone.*' 2>/dev/null | wc -l |
| 104 | + |
| 105 | +# 查看总占用空间 |
| 106 | +du -sh /private/var/folders/*/*/X/com.openai.codex.code_sign_clone 2>/dev/null |
| 107 | +``` |
| 108 | + |
| 109 | +然后,在退出 Codex 后,执行以下命令进行清理: |
| 110 | + |
| 111 | +```bash |
| 112 | +# 退出 Codex |
| 113 | +osascript -e 'quit app "Codex"' |
| 114 | +sleep 3 |
| 115 | + |
| 116 | +# 清掉打包/clone 泄漏 |
| 117 | +base="$(dirname "$(getconf DARWIN_USER_TEMP_DIR)")/X/com.openai.codex.code_sign_clone" |
| 118 | +rm -rf "$base"/code_sign_clone.* |
| 119 | +``` |
| 120 | + |
| 121 | +社区用户 Jolg42 还提供了一个更智能的自动化清理脚本,可以保留最新的克隆目录(以防 Codex 正在运行时需要它),并定期通过 cron 自动清理旧目录: |
| 122 | + |
| 123 | +```bash |
| 124 | +# 添加到 crontab,每小时自动清理一次 |
| 125 | +0 * * * * /bin/bash "$HOME/dotfiles/utils/cleanup-codex-code-sign-clones.sh" >/dev/null 2>&1 || true |
| 126 | +``` |
| 127 | + |
| 128 | +### 3. 僵尸进程与 Crashpad 转储:系统卡顿的幕后黑手 |
| 129 | + |
| 130 | +除了上述两个"重量级" Bug,Codex 还在后台制造了不少麻烦。 |
| 131 | + |
| 132 | +首先是 **Crashpad 待处理转储的无限增长**(Issue #25921)。Codex 每天会生成约 5GB 的崩溃转储文件,存放在 `~/Library/Application Support/com.openai.codex/web/Crashpad/pending` 目录下,且没有任何自动清理机制。 |
| 133 | + |
| 134 | +其次是**僵尸进程的累积**(Issue #25744)。当你退出 Codex 时,它并不会"干净利落"地离开。多个辅助进程(如 `SkyComputerUseService`、`node_repl`、`browser_crashpad_handler` 等)依然在后台游荡,这不仅会导致 HID 延迟,还会引发 `syspolicyd` 和 `trustd` 进程的 CPU/内存失控。 |
| 135 | + |
| 136 | +你可以先用以下命令确认是否有残留进程: |
| 137 | + |
| 138 | +```bash |
| 139 | +pgrep -fl 'Codex|node_repl|SkyComputerUse|app-server|browser_crashpad_handler' |
| 140 | +``` |
| 141 | + |
| 142 | +**急救方案**: |
| 143 | + |
| 144 | +```bash |
| 145 | +# 清理残留的 helper 进程 |
| 146 | +pkill -f 'SkyComputerUseClient|SkyComputerUseService|node_repl|browser_crashpad_handler' 2>/dev/null |
| 147 | + |
| 148 | +# 恢复系统服务 |
| 149 | +sudo killall syspolicyd trustd 2>/dev/null |
| 150 | +``` |
| 151 | + |
| 152 | +--- |
| 153 | + |
| 154 | +## 终极拯救指南:一键清理脚本 |
| 155 | + |
| 156 | +如果你不想每次都手动执行上述繁琐的命令,这里提供一个综合性的清理脚本。建议你将其保存为 `codex_fix.sh`,在每次觉得系统卡顿或磁盘空间报警时运行一次。 |
| 157 | + |
| 158 | +```bash |
| 159 | +#!/bin/bash |
| 160 | +# Codex 完整清理和修复脚本 |
| 161 | + |
| 162 | +echo "=== Codex 问题诊断和修复 ===" |
| 163 | + |
| 164 | +# 1. 退出 Codex |
| 165 | +echo "1. 退出 Codex 应用..." |
| 166 | +osascript -e 'quit app "Codex"' 2>/dev/null || true |
| 167 | +sleep 3 |
| 168 | + |
| 169 | +# 2. 清理孤立进程 |
| 170 | +echo "2. 清理孤立进程..." |
| 171 | +pkill -f 'SkyComputerUseClient|SkyComputerUseService|node_repl|browser_crashpad_handler' 2>/dev/null || true |
| 172 | + |
| 173 | +# 3. 清理 code_sign_clone 目录 |
| 174 | +echo "3. 清理 code_sign_clone 目录..." |
| 175 | +base="$(dirname "$(getconf DARWIN_USER_TEMP_DIR)")/X/com.openai.codex.code_sign_clone" |
| 176 | +if [ -d "$base" ]; then |
| 177 | + find "$base" -maxdepth 1 -type d -name 'code_sign_clone.*' -exec rm -rf {} + 2>/dev/null || true |
| 178 | + echo "已清理: $base" |
| 179 | +fi |
| 180 | + |
| 181 | +# 4. 阻止日志频繁写入 (保护 SSD) |
| 182 | +echo "4. 阻止日志频繁写入..." |
| 183 | +if [ -f "$HOME/.codex/logs_2.sqlite" ]; then |
| 184 | + sqlite3 "$HOME/.codex/logs_2.sqlite" \ |
| 185 | + "CREATE TRIGGER IF NOT EXISTS block_log_inserts BEFORE INSERT ON logs BEGIN SELECT RAISE(IGNORE); END;" \ |
| 186 | + 2>/dev/null || true |
| 187 | + echo "已创建日志阻止触发器" |
| 188 | +fi |
| 189 | + |
| 190 | +# 5. 恢复系统服务 |
| 191 | +echo "5. 恢复系统服务..." |
| 192 | +sudo killall syspolicyd trustd 2>/dev/null || true |
| 193 | + |
| 194 | +echo "" |
| 195 | +echo "=== 清理完成,当前状态 ===" |
| 196 | +echo "- code_sign_clone 目录数: $(find /private/var/folders/*/*/X/com.openai.codex.code_sign_clone -maxdepth 1 -type d -name 'code_sign_clone.*' 2>/dev/null | wc -l | tr -d ' ')" |
| 197 | +echo "- 日志数据库大小: $(ls -lh ~/.codex/logs_2.sqlite 2>/dev/null | awk '{print $5}' || echo '文件不存在')" |
| 198 | +``` |
| 199 | + |
| 200 | +--- |
| 201 | + |
| 202 | +## 写在最后 |
| 203 | + |
| 204 | +Codex 作为一款强大的 AI 编程助手,无疑极大地提升了我们的开发效率。但在享受便利的同时,我们也必须警惕这些底层 Bug 对硬件和系统的潜在伤害。 |
| 205 | + |
| 206 | +在官方彻底修复这些问题之前,定期检查你的磁盘空间、监控 SSD 写入量,并备好上述的急救脚本,将是你在这场"人机博弈"中保护自己硬件的最佳策略。 |
| 207 | + |
| 208 | +希望这篇文章能帮你拯救正在"流血"的 SSD,也期待 OpenAI 能尽快推出修复补丁,让我们可以更加安心地进行 Vibe Coding。 |
| 209 | + |
| 210 | +--- |
| 211 | + |
| 212 | +### 参考资料 |
| 213 | + |
| 214 | +[1] [附解决方案] Codex桌面版/CLI版可能会频繁写入日志影响SSD寿命 每天写入1.76TB. 蓝点网. https://www.landian.news/archives/113555.html |
| 215 | + |
| 216 | +[2] [Bug] macOS app leaves code_sign_clone directories after quit (~965MB per launch). GitHub Issue #25667. https://github.com/openai/codex/issues/25667 |
0 commit comments