OpenAI 靠「流行病學分析」抓蟲:查出硬體故障與潛伏 18 年的開源 Bug
幾個月前,OpenAI 工程師在排查支撐 ChatGPT 搜尋等功能的 Rockset 服務崩潰時,藉助 ChatGPT 構建指令碼批次分析了過去一年的核心轉儲。他們發現看似相同的崩潰實為兩類獨立問題:一臺 Azure 物理主機的 CPU 計算靜默出錯,以及 GNU libunwind 潛伏 18 年的競態漏洞。

當線上的 C++ 服務突然崩潰,而且每次崩的方式都透著一種說不出的詭異,最頭疼的往往不是程式碼寫錯了,而是所有的常規線索都在說謊。
OpenAI 最近在內部的 Rockset 服務上就遇到了這種見鬼的事。Rockset 是 OpenAI 在 2024 年收購的雲原生資料系統,全是用 C++ 寫的,專門負責 ChatGPT 聯網搜尋、外掛呼叫以及工作區知識庫的流式同步。前段時間,這個系統開始偶爾崩潰,報錯看起來極其離譜:函式明明正常執行完了,返回時卻跳到了一個根本不存在的程式碼地址。有時候棧裡的返回地址直接變成了空指標 NULL,有時候棧指標暫存器偏了整整 8 個位元組。
懂底層的人都知道,現代編譯器在普通函數里根本不可能寫出這種錯。OpenAI 團隊一開始像醫生看病一樣,抓著單個崩潰現場反覆研究,甚至查到了 Linux 核心與訊號機制,但每一個假設都被自己手頭的證據推翻了。
讓 ChatGPT 給一整年的崩潰切片
卡住之後,團隊決定換個思路,從單案診斷轉向流行病學調查。既然盯住一個患者看不出名堂,不如把過去一年所有崩潰樣本拉出來,做群體層面的統計分析。
但這事人力根本看不過來。他們讓 ChatGPT 寫了一個自動化分析指令碼,直接調取儲存在 Azure 上的核心轉儲檔案,提取出崩潰瞬間的暫存器狀態和呼叫棧,再結合日誌自動分類。這個指令碼把一整年積累的生產環境轉儲全部跑了一遍,立刻將原本混在一起的崩潰切成了兩個截然不同的群體。
資料一分開,真相就清晰了。看似同一種幽靈崩潰,背後其實藏著兩個毫無關聯的真兇,只是碰巧撞到了一塊。
算錯數的 CPU 與潛伏 18 年的開源老蟲
第一群崩潰被精準鎖定在了一臺具體的 Azure 物理宿主機上。那臺機器的 CPU 出現了極其罕見的靜默硬體算術損壞,連最基礎的數字計算都會算錯,自然會把棧指標算偏。
另一群更廣泛的崩潰,則把矛頭指向了廣泛使用的基礎開源庫 GNU libunwind。團隊發現,那裡面藏著一個存在了整整 18 年的競態條件漏洞。因為 Rockset 為了精確統計高併發任務的 CPU 開銷,每隔幾毫秒就會觸發一次訊號,高頻的訊號投遞碰巧把這個陳年老蟲徹底激活了。目前這個漏洞已經被修復並打了補丁。
為什麼重要
這起排查對普通使用者的直接價值在於,它排除了 ChatGPT 搜尋與知識庫外掛在底層的大規模暗病,檢索響應的穩定性會有實打實的提升。對於每天和分散式系統、C++ 打交道的工程師來說,這也是一個非常值得參考的現實樣本。
我們認為,OpenAI 這次最聰明的地方不是底層逆向技術有多強,而是排查範式的切換。很多團隊在遇到偶發性記憶體越界或系統崩潰時,往往容易陷入抓著單個堆疊死磕的盲區,最後歸咎於玄學。用大模型快速搓出專用指令碼,把海量二進位制轉儲變成結構化資料集,用流行病學的統計聚類來破案,這種打法成本極低,卻把排查效率拉高了幾個數量級。
但這件事也暴露了基礎設施層隱秘的脆弱性。大模型底座越來越依賴高效能的 C++ 資料引擎,而在高併發與極端排程壓力下,幾十年前寫下的底層開源庫、乃至雲廠商物理晶片的一丁點硬體故障,都會被成倍放大。隨著 AI 系統對即時上下文檢索的需求越來越重,未來這種軟硬體交界處的暗坑只會更多,光靠事後搶救不夠,全鏈路的異常監控和自動化歸因遲早要變成標配。
來源 (1)
- openai.com(在新分頁開啟)原文openai.com