共计 1296 个字符,预计需要花费 4 分钟才能阅读完成。
近日,bloomberg 开源了一项 Python 内存分析器 ——“Memray”。目前,该我的项目在 Github 上已取得了 5.2K stars,热度不错。
Memray 是一款 Python 的内存分析器,可跟踪 Python 代码、本机扩大模块和 Python 解释器自身中的内存调配。可生成几种不同类型的报告,以帮忙剖析捕捉的内存应用状况数据。通常用作 CLI 工具,也可用作库来执行更细粒度的剖析工作。
次要特点:
- 跟踪每个函数调用,以便它可能精确地示意调用堆栈,与采样分析器不同。
- 解决 C /C++ 库中的本机调用,整个调用堆栈都呈现在后果中。
- 高速!剖析会使应用程序的速度降到最低。跟踪本机代码的速度稍慢,可依据须要启用或禁用。
- 可生成无关收集的内存应用数据的各种报告,如 flame graphs。
- 应用 Python 线程。
- 与本地线程(如 C 扩大中的 C++ 线程)一起工作。
Memray 可帮忙解决以下问题:
- 剖析应用程序中的调配,以帮忙发现高内存使用率的起因。
- 查找内存透露。
- 查找导致大量调配的代码热点。
值得注意的是,Memray 仅在 Linux 上工作,不能装置在其余平台上。
装置
Memray 须要应用 Python 3.7+ 版本,且能够应用最罕用的 Python 打包工具轻松装置。倡议应用 pip 装置 PyPI 的最新稳固版本:
python3 -m pip install memray
请留神,Memray 蕴含一个 C 扩大,因而发行版和源代码都以二进制代码的模式散发。如果您的零碎(Linux x86/x64)没有可用的二进制管制盘,则须要确保装置的零碎满足所有依赖项。
用法
有很多办法能够应用 Memray。最简略的办法是将其用作命令行工具来运行脚本、应用程序或库。
usage: memray [-h] [-v] {run,flamegraph,table,live,tree,parse,summary,stats} …
Python 应用程序的内存分析器
运行“memray Run”生成内存配置文件报告,而后应用 reporter 命令
例如“memray flamegraph”或“memray table”,将后果转换为 HTML。
原生模式
Memray 反对跟踪原生 C/C++ 函数和 Python 函数。在剖析具备 C 扩大的应用程序(如 numpy 或 pandas)时,这一点尤其有用,因为这样能够全面理解扩大调配了多少内存,以及 Python 自身调配了多少内存。
要激活本机跟踪,在应用 run 子命令时须要提供 –native 参数:
memray run –native my_script.py
这将主动将本机信息增加到后果文件中,任何报告程序(如 flamegraph 或 table reporters)都将主动应用它。
报告器以不同于 Python 帧的色彩显示本机帧,还通过查看框架中的文件地位来辨别它们(Python 框架通常由扩大名为.py 的文件生成,而本机框架则由扩大名为.c、.cpp 或.h 的文件生成)。
Live mode
Memray 的 Live mode 在基于终端的界面中运行脚本或模块,容许您在运行时以交互方式查看其内存应用状况。这对于调试须要很长时间能力运行或出现多种简单内存模式的脚本或模块十分有用。