所有文章
精選文章

排查記憶體洩漏:沿著參照,找到物件為何還活著

從 Google Chat 的排查案例出發,理解 Retainers 如何協助定位長時間執行網頁中的記憶體保留問題。

原作者:Vatan Aggarwal and Thierno Thiam
來源:Chrome for Developers

閱讀原文

先固定一個能重複的操作

Vatan Aggarwal 與 Thierno Thiam 介紹了使用 Chrome DevTools for agents 排查 Google Chat 記憶體問題的過程。文中的修復成果屬於 Google 專案,不是本站或你的應用程式已獲得的收益。先定義具體操作,以及操作結束後哪些物件理應釋放。

別只看記憶體總量,要看參照關係

堆積快照呈現仍可到達的物件;Retainers 區域列出指向目前選取物件的其他物件。下方官方文件範例中,Item 執行個體透過 x 屬性保留一個字串。這是協助理解介面的 DevTools 範例,不是 Google Chat 的正式環境快照。

Chrome DevTools 官方範例:選取字串由 Item.x 保留。來源:Meggin Kearney、Sofia Emelianova,Chrome for Developers / Google;CC BY 4.0,原圖未改動。不是 Google Chat 正式環境快照。
Chrome DevTools 官方範例:選取字串由 Item.x 保留。來源:Meggin Kearney、Sofia Emelianova,Chrome for Developers / Google;CC BY 4.0,原圖未改動。不是 Google Chat 正式環境快照。 圖片來源

把發現變成可以驗證的檢查

比較操作前、執行目標操作後、還原或關閉後的三個狀態,重複相同流程看保留是否持續增加。沿參照路徑判斷物件是否應該存在,再決定修改位置。合理快取、最終會清理但數量過多的監聽器,都不能直接等同於洩漏。

相關智能體記憶體指南說明了三態取樣方法。驗證修復時保留相同操作與條件,結合本站 Bug 修復驗證指南補足重現和回歸證據;智能體的解釋或一次變小的快照,都不足以證明問題解決。本站閱讀了資料,未執行原文實驗。

資料來源與延伸閱讀

  1. How Google Chat fixed 30+ memory issues with Chrome DevTools for agents官方資料 · Vatan Aggarwal and Thierno Thiam
  2. Debug memory leaks with Chrome DevTools for agents官方資料 · Chrome for Developers / Google
  3. Record heap snapshots: The Retainers section官方資料 · Meggin Kearney and Sofia Emelianova
  4. Boloop: verify an AI-generated bug fix文章 · Tink