当前位置: 首页 > news >正文

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

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

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

工具的主要特点:

跟踪每个函数的调用,能够准确的跟踪调用栈

能跟踪c/c++库的调用

分析速度很快

收集内存数据,输出各种图标

使用python线程

与本地线程一起工作

可以帮助解决的问题:

分析应用程序中内存分配,发现高内存使用率的原因

查找内存泄漏的原因

查找导致内存大量分配的代码热点

►►►

memray安装

环境要求:python3.7+以上版本,linux系统(仅支持linux系统)

安装:pip3 install memray

memray使用

memray使用帮助

python3 -m memray --help

图片

run命令使用

  • python3 -m memray run --help 获取帮助

图片

python3 -m memray run xxx.py  直接分析某个py文件的内存使用情况,就会在当前路径下生成一个 ‘memray-py文件名.进程id.bin’ 的内存使用记录文件。当然,也可以跟上-o outFiPath 指定输出路径。如果运行的py文件是模块代码,也可以使用-m xxx.py 方式运行。

图片

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

图片

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

  • python3 -m memray run --native xxxx.py 会跟踪分析python代码中调用底层的C/C++函数消耗的内存情况

图片

图片

  • python3 -m memray run --trace-python-allocators xxx.py 跟踪分析python程序内存分配器pymalloc的情况

图片


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

  • python3 -m memray run --live xxx.py 用实时屏幕模式显示跟踪的内存数据。

图片

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

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

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

  • python3 -m memray flamegraph --help 获取帮助

图片

  • python3 -m memray flamegraph xxx.bin 生成火焰图

table命令--生成表格报告

  • python3 -m memray table --help 获取帮助

  • python3 -m memray table xxxx.bin 把bin文件转换为表格报告

图片

tree命令--生成树形报告

  • python3 -m memray tree --help 获取帮助

  • python3 -m memray tree xxxx.bin 把bin文件转换为树形报告

图片

summary命令--生成概要报告

  • python3 -m memray summary --help 获取帮助

  • python3 -m memray summary xxxx.bin 对bin文件进行分析,生成概要报告

图片

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

  • python3 -m memray stats --help 获取帮助

  • python3 -m memray stats xxxx.bin 对bin文件进行分析,生成详细报告

图片

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

在这里插入图片描述

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

http://www.lryc.cn/news/151524.html

相关文章:

  • Jmeter(二十八):beanshell的使用
  • 数学建模:层次分析法
  • POI-TL制作word
  • 大数据Flink(七十一):SQL的时间属性
  • 51单片机项目(7)——基于51单片机的温湿度测量仿真
  • 按钮控件之1---QPushButton 标准按钮/普通按钮控件
  • Ae 效果:CC Light Rays
  • MPI之通信模式(标准,缓存,同步,就绪)
  • 面试官:说一下 MyBatis 的一级缓存和二级缓存 ?
  • Ajax与jQuery
  • 色温曲线坐标轴的选取:G/R、G/B还是R/G、B/G ?
  • maven部署
  • docker进阶作业
  • HTML+JavaScript+CSS DIY 分隔条splitter
  • Oracle-day5:新增、复制建表、表结构、表数据、删除
  • Scratch 画画的技巧
  • 国际版阿里云/腾讯云:阿里弹性云手机正式公测
  • 服务器数据恢复- RAID5出现故障后恢复数据和操作系统的案例
  • Vue3实现可视化拖拽标签小程序
  • SSM 前端使用AJAX方式,fromdata文件格式上传二进制流文件
  • LeetCode-455-分发饼干-贪心算法
  • 新版 Next.js 从入门到入土
  • OpenCV(十):图像缩放、翻转、拼接的介绍与使用
  • C++ 学习之 构造函数 和 析构函数
  • 加快 MySQL 数据迁移
  • CANalyzer panel
  • 延迟队列的理解与使用
  • jQuery成功之路——jQuery的DOM操作简单易懂
  • C++ 学习系列 -- 智能指针 make_shared 与 make_unique
  • 贝叶斯神经网络 - 捕捉现实世界的不确定性