近日,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 在基于终端的界面中运行脚本或模块,允许您在运行时以交互方式检查其内存使用情况。这对于调试需要很长时间才能运行或呈现多种复杂内存模式的脚本或模块非常有用。


MissD
955 声望40 粉丝