一年吃掉一块固态硬盘,Codex日志bug被骂“劣质软件”

marsbit發佈於 2026-07-02更新於 2026-07-02

文章摘要

OpenAI的编程工具Codex被曝存在严重日志Bug,其默认的TRACE级别日志记录导致在用户本地SQLite数据库中疯狂执行“插入后立即删除”操作。该问题在21天内产生了37TB的写入量,推算一年可达640TB,足以快速耗尽一块消费级固态硬盘(SSD)的写入寿命。 问题的核心在于,尽管最终数据库文件大小仅约1GB,但SSD的损耗取决于总写入数据量。Codex的日志系统无视用户通过RUST_LOG环境变量进行的配置,将大量无用的调试信息和遥测数据(占总写入量的96%)持续写入硬盘。类似“日志无限增长”的问题在Codex中至少被报告过9次。 在问题被提交至GitHub并引发社区广泛讨论后,OpenAI合并了修复代码,据称可减少约85%的日志写入量,但仍未彻底解决。此事引发了开发者对AI编程工具资源管理不当的批评,将其称为“劣质软件”,并指出同类工具Claude Code也存在类似问题。评论认为,现代软件过度依赖硬件性能来掩盖其低效和缺陷,形成了一个“软件越写越烂,硬件越造越猛”的荒诞循环。

一年「吃掉」一块1TB的固态硬盘?

OpenAI的旗舰编程工具Codex,正在以一年640TB的写入量,烧穿你的固态硬盘。

前段时间,一位开发者在GitHub上提交了一个issue。这个如今标着「Closed」、编号#28224的GitHub issue,标题写着:

Codex的SQLite反馈日志一年能写640TB,迅速耗尽固态硬盘寿命。

据这位报告者实测,他的主固态硬盘连续开机21天被写掉37TB,照此推算一年约640TB,足够报废一块总写入量(TBW)为600TB的消费级硬盘。

为佐证,他贴出了两张表。

在证据1里,这个日志库始终只有1.2GB,表面像什么都没发生;可它的自增行ID已经冲到55亿,真正留存的行不过50万出头,两者差了整整一万倍。

关键在于,硬盘损耗只算一共写过多少、不管此刻还剩多少:这55亿行全都落过盘,删掉也退不回已经付出的写入。所以你查文件永远只看到那50万行,硬盘却早已扛下55亿行的写入量。

证据2暴露了这55亿行的分布:九成多是连开发者自己都不会回头看的调试噪声,光把每条WebSocket数据包整包抄下来这一项,就占了一半。

罪魁祸首,是一行Level::TRACE默认配置,它把你硬盘的写入寿命,当成了免费的草稿纸。

Hacker News上一条高赞评论,直接为这事定了性:

这是「劣质软件」(slopware)最臭名昭著的例子之一。

这位网友还无奈地甩出一句:

这真是个悲剧。这个世界,需要有人来和Anthropic竞争。

更尴尬的是,这个问题不是没人报。

从今年4月起就有零星反馈,前后拖了两个多月,非要等用户自己测算、写报告、把它顶上Hacker News头条,才算被正经对待。即便如此,这一轮也只砍掉了约85%的日志写入。

还有人想自己动手,却发现无从下手:这些工具的桌面端是闭源的。

评论区还有一句神评论:审查流程怎么没拦住这么明显的错误?哦对了......@codex 审查一下这个。

640TB,到底是怎么写出来的

640TB是什么概念。

主流消费级固态硬盘,标称写入寿命大概150到600 TBW,够普通用户用上十几二十年。

而Codex这个「记录自己干了点什么」的日志功能,一年就能写满。

事情要从这位用户清点硬盘说起。他的机器连续开机21天,主固态硬盘被写掉了37TB。

照这速度,一年约640TB。

更离谱的是写入方式。

Codex在本地维护着一个SQLite数据库logs_2.sqlite,专门记录反馈日志。这位用户抓了15秒——数据库被插入36211行,而保留的总行数,从头到尾都是681774,一个没多。

每插进一行,就有一行被删掉。行数始终不变,磁盘却被来回擦写几万次。

这套机制有个外号,叫insert-and-prune:插入,然后立刻删除。

更荒诞的是它记的东西:一堆文件系统的inotify事件。

ld.so.cache被记了128764次,locale.alias37982次,passwd23843次。

同一个文件,被同一个程序,反反复复记上十几万遍。

日志里的自增ID已经超过55亿,而真正留存的行只有约50万。

两者差了一万倍。

这不是bug,简直就像是一个AI编程工具在对着自己的硬盘反复念经。

文件才1GB,写入却是640TB

一边写一边删,留下的logs_2.sqlite能多大?大约1GB。

这就引出整件事最反常识的一点:固态硬盘的寿命看的是「写入量」,而非「文件大小」。一个1GB的文件被反复擦写640次,对硬盘就等于写了640TB。

SQLite用的是WAL机制,每次改动先写进-wal文件,攒够再checkpoint回主库。Codex每15秒做三万多次插入加删除,每一次都要经过WAL、索引更新、checkpoint,同一块存储区,被擦了又擦。

打个比方:一本1GB的笔记本,你每天擦掉重写1750遍,连写一年。笔记本还是那本,纸已经磨穿了。

这也是这个bug能潜伏这么久的原因:它不占空间,只烧寿命。

查可用磁盘看不出异常,文件大小一直很安静,只有去读硬盘自己的SMART健康计数,才能看到写入量在悄悄累积。

根因,一行被无视的RUST_LOG

为什么会记这么多日志?

答案在Codex源码的一行配置里:SQLite反馈日志的sink,初始化时用的是Targets::new().with_default(Level::TRACE)。

一句话,日志默认开到TRACE级别,最高、最啰嗦、什么都记的那一档。

Codex的日志框架是Rust生态的tracing,标准做法是读RUST_LOG环境变量。用户当然试过,把RUST_LOG调成info、warn,甚至直接关掉。

没用。

with_default(Level::TRACE)把全局默认硬钉死在TRACE,RUST_LOG在这条路径上根本不生效。你以为自己关掉了日志,它照写不误。

这种bug最坑人的地方在于,并非「你忘了配置」,而是「你配置了,它假装没听见」。

更刺眼的是一个比例。

把保留的日志按类别拆开,TRACE占了70.7%,约732.5 MB。再加上codex_otel那两路镜像遥测日志(log_only和trace_safe),又占了25.3%。

七成写入是TRACE噪声,加上镜像遥测,96%全是没人会看的废话。

只有4%,才是真正有意义的内容。

这不是第一个,至少是第九个

报告者翻了Codex仓库,发现这类「日志无界增长」的Issue,至少有9个。

#17320,流式响应期间WAL狂写,根因和这次一模一样,都是TRACE无视RUST_LOG。

#24275,桌面版logs_2.sqlite疯涨。

#22444,WAL无限增长还占着空间不释放。

#26374,一天写0.75GB,没轮转。

#27911,一个4KB的goals_1.sqlite,被写成11MB/s。

#20563,进程闲着也狂写盘。

#27020,Windows上磁盘活跃100%。

最早的源头能追到#12969,正是这个PR把SQLite反馈日志的sink按TRACE级别接了进来。

一个4KB的数据库被写成每秒11MB,单独拎出来都够写一篇。而它和640TB那个,是同一个产品、同一套遥测体系的症状。

这说明Codex的日志和遥测系统,从一开始就没有「资源预算」这个概念。

整个赛道都在卷token预算、卷上下文长度、卷模型能力。

但几乎没人问:一个常驻用户机器、7×24小时跑的Agent,它的磁盘、内存、CPU预算,谁来管?

修了,但修得很OpenAI

6月14日报上GitHub,6月23日,报告者更新了一条:三个PR已合并,据他自己的Codex反馈能减少约85%日志,于是宣布关闭。

先说这个85%——不是100%,而且还没全落地。

三个修复里,#29432、#29457已随0.142.0发布,砍掉逐条WebSocket日志和噪声目标;第三个#29599停掉另一类被桥接进来的冗余日志,要等0.143.0才上线。

即便三个全到位,剩下约15%、一年仍要写约96TB,不过是从「一年烧穿硬盘」降到「六年烧穿硬盘」。

也有人替它辩护:trace日志是按设计存下来调试的,不算bug,对OpenAI也确实方便追查边缘case。

但问题恰恰在这儿:拿付费用户的SSD寿命,给厂商的debug做免费存储,这事,用户同意过吗?

编程战场,烧穿的不只是SSD

有意思的是,被点名的并不只有Codex。

评论区马上有人补刀:Claude Code也往本地猛写调试日志,有人只好把日志目录软链到内存盘(tmpfs),给SSD续命。

两家旗舰,犯的是同一类毛病。

社区里的评论,很快从一个bug,放大到整个AI编程工具的质量问题。

有人吐槽这些智能体GPU常年跑满、内存动辄70GB,有人干脆给这代软件起了名字:劣质软件。

那位开发者的建议本来极简:给应用设条线,别超过3GB。就这一条线,Codex拖了9个Issue、好几个月才肯画下来。

问题是一个时刻把「AGI」挂在嘴边的公司,为什么会栽在实习工程师都能看出来的问题上?

为什么这毛病能藏这么久,有条评论也说到了点子上。

放十年前,日志开到TRACE,程序当场卡死,当天就被修掉;如今CPU够快、内存够大、磁盘够猛,这点毛病被硬件性能悄悄消化,程序照跑、界面照常、用户无感,直到某天SSD提前报废。

这两年,软件被AI生成的代码塞满,功能越堆越多、抽象层越叠越厚、资源消耗一路狂飙,全靠硬件厂商每年用更快的芯片硬兜。

于是有了一个荒诞循环:软件越写越烂,硬件越造越猛。用户揣着「好像没变慢」的错觉掏钱换新机,其实只是新机器勉强撑住了更烂的软件。

一个小bug当然无法压垮OpenAI。但Codex和Claude Code的竞争已经从模型能力,蔓延到了开发者工作流的入口。

在这条战线上,快速作出改变,响应开发者需求从来不是加分项,只是入场券。

参考资料:

https://github.com/openai/codex/issues/28224

https://news.ycombinator.com/item?id=48626930

本文来自微信公众号“新智元”,作者:ASI启示录

熱門幣種推薦

相關問答

Q根据文章,Codex工具的日志bug每年会写入多少数据,导致什么问题?

ACodex工具的日志bug每年会写入约640TB数据。这远超主流消费级固态硬盘(标称写入寿命约150到600 TBW)的承受能力,足以在一年内烧穿(报废)一块总写入量为600TB的硬盘。

Q文章中提到的Codex日志问题,其根本技术原因是什么?

A根本技术原因在于Codex源码中,SQLite反馈日志的sink在初始化时被硬编码配置为最高、最详细的TRACE级别(Targets::new().with_default(Level::TRACE))。这使得日志系统会记录大量冗余的调试信息,且无视用户通过RUST_LOG环境变量调整日志级别的设置,导致写入失控。

Q为什么这个严重消耗SSD寿命的bug难以被用户察觉?

A这个bug难以察觉主要有两个原因:第一,日志文件本身的大小始终保持在大约1GB左右,不会异常膨胀占用磁盘空间,因此通过查看磁盘可用空间无法发现问题。第二,其对硬盘的损耗体现在“总写入量”上,这部分数据需要查看硬盘的SMART健康计数才能发现,日常使用中用户通常不会监控这个指标。

Q文章中提到OpenAI是如何修复这个问题的,修复效果如何?

AOpenAI通过合并三个相关的PR进行了修复。其中两个已随版本0.142.0发布,砍掉了逐条WebSocket日志和一些噪声目标;第三个修复则需要等待版本0.143.0。根据报告者实测,修复后大约能减少85%的日志写入量。这意味着写入量从每年约640TB降至约96TB,从“一年烧穿硬盘”变为“六年烧穿硬盘”,问题得到缓解但未完全根除。

Q文章将Codex这类AI编程工具的普遍性问题称为什么?并简述其背后的行业现象。

A文章将这类问题称为“劣质软件”。其背后的行业现象是,在激烈的AI竞赛中,开发者过度专注于提升模型能力(如token预算、上下文长度),而忽略了作为常驻用户设备的客户端软件的资源管理(如磁盘、内存、CPU预算)。同时,现代硬件性能的强大掩盖了软件的低效和缺陷,导致一个“软件越写越烂,硬件越造越猛”的荒诞循环,用户最终为更差的软件体验买单升级硬件。

你可能也喜歡

世界杯爆冷频现,预测市场的“笨蛋钱”给俺看乐了

本文探讨了2026年世界杯期间预测市场中因频繁爆冷而产生的“笨蛋钱”现象,并通过几个典型亏损案例分析了其是否具有反向参考价值。 首先,文章以西班牙队被佛得角队0-0逼平为例。赛前,巨鲸用户@betoor619投入100万美元,以高赔率买入“西班牙胜”,意图赚取8.5万美元,结果因佛得角门将的神勇表现而血本无归。此役被视为本届世界杯强队频频被弱队逼平的开端。 其次,葡萄牙队同样被首次入围的刚果金队1-1逼平。赛前胜率达49%的“聪明钱”花费超24.3万美元预测葡萄牙获胜,最终亏损。文章指出,强队进攻乏力与弱队坚决执行防守反击策略是爆冷关键。 随后,文章以地址@Zzzz87为例,说明了经验失效的反转现象。该地址在佛得角逼平强队后,转而押注其能战胜沙特阿拉伯,结果再次因佛得角战平而亏损8万美元。不过,该地址在淘汰赛阶段调整策略,转而押注强队,近一周成功实现约26.9万美元的盈利,扭转了近一个月的亏损局面。 文章最后总结道,足球比赛充满不确定性,结果并非单纯由身价或名气决定。无论是跟随“聪明钱”还是反向借鉴“笨蛋钱”,投资者都需要结合比赛实际情况灵活调整策略,而享受比赛过程本身也同样重要。

Odaily星球日报30 分鐘前

世界杯爆冷频现,预测市场的“笨蛋钱”给俺看乐了

Odaily星球日报30 分鐘前

交易

現貨

熱門文章

如何購買T

歡迎來到HTX.com!在這裡,購買Threshold Network Token (T)變得簡單而便捷。跟隨我們的逐步指南,放心開始您的加密貨幣之旅。第一步:創建您的HTX帳戶使用您的 Email、手機號碼在HTX註冊一個免費帳戶。體驗無憂的註冊過程並解鎖所有平台功能。立即註冊第二步:前往買幣頁面,選擇您的支付方式信用卡/金融卡購買:使用您的Visa或Mastercard即時購買Threshold Network Token (T)。餘額購買:使用您HTX帳戶餘額中的資金進行無縫交易。第三方購買:探索諸如Google Pay或Apple Pay等流行支付方式以增加便利性。C2C購買:在HTX平台上直接與其他用戶交易。HTX 場外交易 (OTC) 購買:為大量交易者提供個性化服務和競爭性匯率。第三步:存儲您的Threshold Network Token (T)購買Threshold Network Token (T)後,將其存儲在您的HTX帳戶中。您也可以透過區塊鏈轉帳將其發送到其他地址或者用於交易其他加密貨幣。第四步:交易Threshold Network Token (T)在HTX的現貨市場輕鬆交易Threshold Network Token (T)。前往您的帳戶,選擇交易對,執行交易,並即時監控。HTX為初學者和經驗豐富的交易者提供了友好的用戶體驗。

862 人學過發佈於 2024.12.10更新於 2026.06.02

如何購買T

相關討論

歡迎來到 HTX 社群。在這裡,您可以了解最新的平台發展動態並獲得專業的市場意見。 以下是用戶對 T (T)幣價的意見。

活动图片