彭博社開(kāi)源 Memray,一個(gè) Python 內(nèi)存剖析器
Memray 是一個(gè)由彭博社開(kāi)發(fā)的內(nèi)存剖析器memory profiler,現(xiàn)在已經(jīng)開(kāi)源。它可以跟蹤 Python 代碼中的內(nèi)存分配,包括本地?cái)U(kuò)展和 Python 解釋器本身。內(nèi)存剖析是了解程序如何利用內(nèi)存的有力工具,因此可以檢測(cè)內(nèi)存泄漏或確定程序中哪些區(qū)域消耗的內(nèi)存最多。
與 py-spy 等抽樣內(nèi)存剖析器相比,Memray 可以跟蹤每個(gè)函數(shù)調(diào)用,包括對(duì) C/C++ 庫(kù)的調(diào)用,并詳細(xì)顯示調(diào)用棧。彭博社稱,這并不以犧牲性能為代價(jià),剖析只使解釋代碼的速度變慢一點(diǎn)。然而,原生代碼剖析的速度較慢,因此需要直接啟用。
Memray 可以根據(jù)獲得的內(nèi)存消耗數(shù)據(jù)生成各種報(bào)告,包括火焰圖,這對(duì)快速、準(zhǔn)確地識(shí)別最常見(jiàn)的代碼路徑很有價(jià)值。
據(jù) EgdeDB 的聯(lián)合創(chuàng)始人兼 CEO Yury Selivanov 稱,該工具提供了以前無(wú)法獲得的對(duì) Python 應(yīng)用的洞察力。Memray 可以用來(lái)從命令行中執(zhí)行和剖析 Python 應(yīng)用。
$ python3 -m memray run -o output.bin my_script.py
$ python3 -m memray flamegraph output.bin
另外,你可以使用 pytest-memray 將 Memray 集成到你的測(cè)試套件中。你也可以用 -native 命令行選項(xiàng)對(duì)所有的 C/C++ 調(diào)用進(jìn)行剖析,或者用 -live 命令行選項(xiàng)在程序執(zhí)行過(guò)程中實(shí)時(shí)分析內(nèi)存分配。Memray 可以在 Linux x86/64 系統(tǒng)上用 python3 -m pip install memray 來(lái)安裝。