Meta開源MemLab JavaScript內存泄露檢測器


Facebook母公司Meta剛剛宣佈開源MemLab,該工具可在Chromium內核瀏覽器上,查找JavaScript應用程序中的內存泄露。Facebook工程團隊指出:“使用我公司網絡應用程序的人們,通常會立即留意到性能與功能正確性問題。但對於內存泄露,其隱蔽性就遠不在同一水平線上。取而代之的是,用戶會得到一個響應性逐漸降低的會話”。

內存泄漏的後果在單頁應用程序(SPA)中更為嚴重,因為用戶可能會在較長時間內繼續與頁面交互,而 MemLab 就是專為這種場景而設計的。

如上圖所示,MemLab 的工作原理如下:

(1)導航到頁面並返回;

(2)查找未釋放的對象;

(3)顯示泄露追蹤結果。

1 - 創建場景,並將文件保存到 ~/memlab/scenarios/detached-dom.js 路徑。

據悉,MemLab 使用一個名為“Puppeteer”的 Node.js 庫。它可以控制 Google Chrome 或其它基於 Chromium 內核打造的瀏覽器,且默認情況下以 headless 模式運行(方便命令行交互)。

Facebook 工程師解釋稱,MemLab 的工作方式就是導航到一個頁面、然後離開。

正常情況下,可預計該頁面分配的大部分內存也將被釋放。但若沒有,則意味其存在極高的內存泄露可能性。

MemLab 擁有一些特定於框架的知識(尤其是 React),這是由 Facebook 團隊打造的框架、現也主導著 JavaScript 的開發。

2 - 運行 MemLab(或需幾分鐘)

React 使用存儲在樹結構中、被稱作 Fibers 的對象,來表示內存中的瀏覽器文檔對象模型(DOM)。

據該團隊所述,這可能是存在“巨大內存泄露”的一個主要原因。擁有強連接圖的缺點很是顯著,若有任何外部引用指向圖的任何部分,就無法對整個圖開展垃圾回收。

MemLab 的另一特性,就是提供 JavaScript 堆的圖形視圖、啟用用於檢查堆快照的 API 。這意味著開發者能夠編寫開展內存斷言的測試,例如聲明某個對象將不再存在於內存中。

此外有一個用於查找重復字符串實例的工具,在某個案例中,團隊發現字符串占用 70% 的堆、且其中半數至少有一個重復的實例。

3 - 調試泄露追蹤

包括 Chrome、Edge、Firefox 在內的瀏覽器,都有附帶內存檢查工具。但正如以為開發者在 Hacker News 上吐槽的那樣 —— 這些開發工具難以在調試過程中揪出內存泄露的問題。

安裝方面,MemLab 不僅可以通過 npm 包管理器、還可從 git 存儲庫進行構建。不過 Windows 平臺必須使用 Git Bash,否則會在構建時遭遇失敗。然後開發者可以運行 MemLab,將其傳遞給 JavaScript 文件中定義的場景。

最後,MemLab 的另一項強大功能,就是可以在測試期間作為命令過程的一部分而運行。這意味著如果代碼中引入嚴重的泄露,開發者們也能夠在投入生產環境前加以捕獲。


相關推薦

2023-11-05

等個人資料非常自然絕不重樣。甚至至少還有一個對其他開源項目的貢獻記錄等,不但算法檢測不出來,肉眼看也沒毛病。便宜的最低可做到0.4-0.88元一顆星星,這種就是最簡單的新註冊空號去刷,默認頭像,隨機生成昵稱的那

2024-03-21

3月11日周一,馬斯克發推文說要在一周內開源Grok。眾多開發者等著盼著過一周,到周日Grok才正式將代碼推到開源社區。開源的Grok-1是一個基於Transformer架構的自回歸模型,參數規模達到3140億參數,是目前參數量最大的開源模型

2023-01-27

的速度發送信息需要一個單光子探測器,它不僅可以快速檢測到光子,還可以精確測量它們的到達時間。在Optica出版集團的高影響力研究雜志《Optica》上,由美國宇航局噴氣推進實驗室的Matthew D. Shaw領導的研究人員描述並展示他

2024-04-16

quot;可能並非孤立事件"。他們說,至少有三個不同的 JavaScript 項目成為未具名個人的攻擊目標,這些人要求進行可疑的更新,或要求成為目標軟件的維護者。JavaScript 編程語言為現代網絡提供大量動力,在全球范圍內被廣泛

2024-04-19

沒有出乎太多意外,Meta帶著號稱“有史以來最強大的開源大模型”Llama3系列模型來“炸街”。具體來說,Meta本次開源8B和70B兩款不同規模的模型。Llama38B:基本上與最大的Llama270B一樣強大。Llama 3 70B: 第一檔 AI 模型,媲美 Gemini 1

2023-04-14

Meta公司已經開源一個人工智能項目,讓任何人都能把他們的塗鴉變得更有生機。該公司希望通過將"AnimatedDrawings"作為一個開源項目提供給其他開發者,他們將能夠創造出新的、更豐富的體驗。基礎人工智能研

2024-04-10

700 億個參數。最值得註意的是,Meta 的 Llama 系列是作為開源產品構建的,代表一種不同的哲學方法,即人工智能作為一種更廣泛的技術應如何發展。與專有模式相比,Meta 希望通過這種方式獲得更多開發者的青睞。但 Meta 似乎

2024-03-28

感到不滿的人會很高興地聽到,該公司正在測試一個內置內存限制機制,以防止瀏覽器占用太多的內存。@Leopeva64在 X(原 Twitter)上發現 Edge Canary 中的新內存控制功能。微軟 計劃讓用戶在玩遊戲時(瀏覽器可以自動檢測)或在

2023-04-06

個用以檢測圖片是否使用生成對抗網絡技術的GAN檢測器;開源社區Hugging Face上搭建有針對AI生成內容的AI圖像檢測器和OPENAI檢測器;2020年,微軟公司還曾發佈過一項名為Microsoft Video Authenticator的工具,用以針對網絡上用深假技術

2024-03-29

表示,紐約市將很快開始測試利用人工智能在地鐵轉門處檢測槍支的技術。亞當斯是在佈魯克林一個地鐵站發生一起爭執事件一周後宣佈這一消息的,在這起爭執事件中,一名男子在向另一名乘客拔槍後被自己的槍射中。亞當斯

2022-09-22

研究。他聲稱,Facebook和Instagram在用戶訪問的網站中註入JavaScript代碼。克勞斯說,這種JavaScript代碼允許Meta公司追蹤"你在任何網站上做的任何事情"。這比常規的廣告跟蹤更進一步,甚至理論上包括捕捉輸入網站的密碼的

2022-11-16

16日 消息:近期,GitHub 發佈2022 Octoverse 報告。報告顯示,JavaScript、Python、Java、TypeScript 和 C# 是 GitHub 項目中使用最廣泛的編程語言。根據報告, GitHub 上的頂級編程語言榜單保持穩定,除 PHP 被 C++ 超越,從第六位下降到第七位外

2022-08-30

存在Google旗下GitHub組織的公共存儲庫中的所有最新版本的開源軟件(包括存儲庫設置)。這些項目的第三方依賴(在提交給Google的OSS VRP之前需要事先通知受影響的依賴方)Google現在接受的提交類型包括供應鏈妥協、設計缺陷和

2022-10-13

理想很美好,現實很骨感。歷史上湧現大量通過 HTML5 或 JavaScript 開發的桌面 UI 項目,但它們在高性能設備上的表現也非常糟糕。CSS 的一個子集雖然最終被用於大多數“傳統”工具包,如 Qt、Cocoa 和 GTK,但采用控制桌面前端的 J