性能测试,python 内存分析工具 -memray

本贴最后更新于 695 天前,其中的信息可能已经事过境迁

Memray是一个由彭博社开发的、开源内存剖析器;开源一个多月,已经收获了超8.4k的star,是名副其实的明显项目。今天我们就给大家来推荐这款python内存分析神器。

Memray可以跟踪python代码、本机扩展模块和python解释器本身中内存分配,可以生成多种不同类型的报告,帮助您分析python代码内存使用情况。

memray安装

memray使用

memray使用帮助

python3 -m memray --help

memray-help

参数 作用
run 运行指定的应用程序并跟踪内存使用情况
flamegraph 在html报告中,用火焰图方式,显示内存使用情况
table 在html报告文件中,用表格的方式显示内存分析情况
live 用实时屏幕显示方式,显示各种内存使用情况
tree 在终端中,用树形结构显示内存使用情况
parse 用debug模式,显示每一行的内存使用情况
summary 汇总终端运行期间的内存使用概况
stats 在终端中非常详细的显示内存使用情况

run命令使用

run-help

参数 作用
-o OUTPU,--output OUTPUT 指定输出结果到哪里
--live 启动实时跟踪会话模式
--live-remote 启动实时跟踪会话并等待客户端连接
--live-port LIVE_PORT, -p LIVE_PORT 启动实时跟踪时要使用的端口
--native 跟踪C/C++堆栈
--follow-fork 跟踪脚本分叉的子进程中的分配
--trace-python-allocators 记录pymalloc分配器的分配情况
-q, --quiet 运行时不显示任何特定于跟踪的输出
-f, --force 强制复购已有文件
--compress-on-exit 跟踪完成后使用 lz4 压缩生成的文件
--no-compress 不使用 lz4 压缩生成的文件
-c 作为字符串传入的程序
-m 将库模块作为脚本运行

408

‘memray-py文件名.进程id.bin’ 文件,可以通过 python3 -m memray flamegraph memray-py文件名.进程id.bin 转换为一份html-火焰图报告

0226

如上图,从上往下,显示了程序的调用过程,宽度,代表函数占用内存多少。

1818

1906

5437

5508

这个看上去,和没有加参数,效果差不多,但是,实际上是完全不一样的。这种方式,会深入跟踪内存分配,python常见的内存分配器有四种(malloc、free、realloc、pymalloc),这个参数,在python出现内存溢出时,就非常有用了。但是,加了这个参数,运输速度会变慢,收集的数据生成的文件会更大。

1233

默认时,根据Total memory的数据从大到小,往下排列;按"O",可以根据私有内存从大到小,排序显示内存对象;按“A”,则根据内存分配次数量从高到底排序。

有了这个统计数据,就能快速定位到哪些对象,占用内存大,哪些对象被频繁的分配内存。这些对象,就是重点分析对象。

flamegraph命令---生成火焰图报告

4223

table命令--生成表格报告

5318

tree命令--生成树形报告

4456

summary命令--生成概要报告

5738

stats命令---生成详细统计报告

0139

1 回帖
请输入回帖内容 ...