py-spy
py-spy 是一个轻量级的采样分析器,用于从Python程序中提取性能数据。它可以在没有修改或重新启动目标程序的情况下工作,使其非常适合在生产环境中查看问题。
安装 py-spy:
$ pip install py-spy
使用 py-spy top 查看正在运行的 Python 进程的线程:
$ py-spy top --pid <pid>
Memray
Memray 是 Python 的内存分析器。它可以跟踪 Python 代码、本机扩展模块和 Python 解释器本身中的内存分配。它可以生成多种不同类型的报告,帮助您分析捕获的内存使用数据。虽然通常用作 CLI 工具,但它也可以用作库来执行更细粒度的分析任务。
安装 Memray:
python3 -m pip install memray
要在脚本或单个 python 文件上使用 Memray,您可以使用
python3 -m memray run my_script.py
如果您通常使用 运行应用程序python3 -m my_module,则可以将该-m标志与 一起使用memray run:
python3 -m memray run -m my_module
Native mode
Memray支持跟踪原生C/C++函数以及Python函数。当分析具有C扩展(如numpy或pandas)的应用程序时,这尤其有用,因为这为我们提供了一个全面的视角,了解扩展分配了多少内存,以及Python本身分配了多少内存。
要激活原生跟踪,您需要在使用run子命令时提供--native参数:
memray run --native my_script.py
这会自动将本机信息添加到结果文件中,并且任何报告器(例如火焰图或表格报告器)都会自动使用它。这意味着不要在火焰图中看到这一点:
您现在可以看到 Python 调用中发生了什么:
报告生成器将原生帧和Python帧用不同的颜色显示。它们还可以通过查看帧中的文件位置来区分(Python帧通常会从带有.py扩展名的文件生成,而原生帧会从带有如.c、.cpp或.h这样的扩展名的文件生成)。
Live mode
Memray 还支持实时模式,Memray的实时模式在基于终端的界面中运行脚本或模块,允许您在其运行时交互式地检查其内存使用情况。这对于调试运行时间较长或显示多种复杂内存模式的脚本或模块很有用。您可以使用--live选项在实时模式下运行脚本或模块。
memray run --live my_script.py
或者如果你想执行一个模块:
memray run --live -m my_module
这将在您的终端中显示以下 TUI 界面: