性能测试,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

运行指定的应用程序并跟踪内存使用情况

flamegraph

在html报告中,用火焰图方式,显示内存使用情况

table

在html报告文件中,用表格的方式显示内存分析情况

live

用实时屏幕显示方式,显示各种内存使用情况

tree

在终端中,用树形结构显示内存使用情况

parse

用debug模式,显示每一行的内存使用情况

summary

汇总终端运行期间的内存使用概况

stats

在终端中非常详细的显示内存使用情况

run命令使用

  • python3 -m memray 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

将库模块作为脚本运行

  • 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文件进行分析,生成详细报告

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/12393.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VR全景展示,VR全景平台,助理全景展示新模式

引言: VR全景展示是一种新型的展示方式,它利用虚拟现实技术和全景拍摄技术,使参观者可以身临其境地进入虚拟展览空间。这种展示方式不仅能够提供更加沉浸式的参观体验,还可以解决传统展览所面临的时间和地域限制等问题。 VR全景展…

测试工具之JMH详解

文章目录 1 JMH1.1 引言1.2 简介1.3 DEMO演示1.3.1 测试项目构建1.3.2 编写性能测试1.3.3 执行测试1.3.4 报告结果 1.4 注解介绍1.4.1 BenchmarkMode1.4.2 Warmup1.4.3 Measurement1.4.4 Threads1.4.5 Fork1.4.6 OutputTimeUnit1.4.7 Benchmark1.4.8 Param1.4.9 Setup1.4.10 Te…

leetcode 812. 最大三角形面积

题目 给你一个由 X-Y 平面上的点组成的数组 points ,其中 points[i] [xi, yi] 。从其中取任意三个不同的点组成三角形,返回能组成的最大三角形的面积。与真实值误差在 10-5 内的答案将会视为正确答案。 示例 1: 输入:points [[…

ActiveReportsJS 4.0 FIX ActiveReportsJS 4.0 Crack

JavaScript 报告工具是一组用于数据整合和可视化的 Web 组件。ActiveReportsJS 是前端开发人员用来在 Web 应用程序中嵌入报告的解决方案。报表设计器和查看器组件、强大的数据可视化器和丰富的 API 等主要功能使 ActiveReportsJS 成为行业领导者。 JavaScript 报告引擎 利用强…

Spark SQL join操作详解

一、 数据准备 本文主要介绍 Spark SQL 的多表连接,需要预先准备测试数据。分别创建员工和部门的 Datafame,并注册为临时视图,代码如下: val spark SparkSession.builder().appName("aggregations").master("lo…

Python进阶内容--迭代器和生成器

什么是迭代器 在 Python 中,迭代器(Iterator)是一个访问集合元素的对象,它能够实现遍历集合的所有元素,而无需了解集合底层结构和细节。Python 中所有可迭代的对象(如 列表、元组、字符串、字典、集合等&a…

leetcodeTmp

文章目录 39. 组合总和33. 搜索旋转排序数组153. 寻找旋转排序数组中的最小值49. 字母异位词分组53. 最大子数组和55. 跳跃游戏56. 合并区间62. 不同路径 39. 组合总和 39. 组合总和 DFS排列&#xff1a;每个元素可选0次&#xff0c;1次以及多次 public List<List<Int…

元宇宙:虚拟仿真技术的全面提升

在当今数字化的世界中&#xff0c;我们经常听到虚拟现实、增强现实、混合现实等技术的名词&#xff0c;这些技术的应用越来越成熟。其中&#xff0c;虚拟仿真技术是一种通过计算机技术来模拟实际场景和对象的过程&#xff0c;它为我们提供了更多的可能性。而最近备受瞩目的元宇…

加密的本质:数学的不对称性

文章目录 引言I 预备知识1.1 加密和授权1.2 非对称的特性II 椭圆曲线加密的方法2.1 椭圆曲线2.2 椭圆曲线的性质引言 不对称有时却自有其妙处与美感,比如黄金分割就是不对称的。 可以通过加密和授权,兼顾保护信息不外泄,而且某些得到授权的人还能使用信息。 I 预备知识 …

亚马逊云科技为全球的可持续发展进程做出贡献

可持续发展是一个涉及经济、环境和社会三个方面的复杂问题。经济发展必须在保护环境和社会公正的前提下进行&#xff0c;这样才能实现真正的可持续发展。为了实现这一目标&#xff0c;人们需要借助技术手段&#xff0c;更好地理解和解决环境和社会问题。 亚马逊云科技是全球领…

(大数据开发随笔9)Hadoop 3.3.x分布式环境部署——全分布式模式

索引 完全分布式模式守护进程布局集群搭建准备总纲配置文件格式化集群启动集群 集群控制命令集群启停进程查看启动日志查看集群常见问题 案例演示&#xff1a;WordCount 完全分布式模式 分布式文件系统中&#xff0c;HDFS相关的守护进程也分布在不同的机器上&#xff0c;如&am…

tp5实现导入excel表到数据库

hello&#xff0c;大家好&#xff0c;好长时间没有更新文章了。最近一直在忙着做项目。所以断更了。 那么好&#xff0c;各位老铁是否想要实现导入导出的功能 请关注我&#xff0c;解密如何实现导入导出&#xff0c; 那么今天先来讲一下用thinkphp5.0 如何实现Excel表格导入数据…

js 事件流程

描述 JavaScript 的执行是单线程的&#xff0c;后面的任务需要等待前面的任务完全完成后&#xff0c;再去执行。DOM 事件&#xff08;文件的加载等&#xff09;、定时器、网络请求等事件&#xff0c;并不会消耗 CPU&#xff0c;这些事件无需等候&#xff0c;所以出现了异步。主…

【Unity VR开发】结合VRTK4.0:创建一个按钮(Option Button)

语录&#xff1a; 如同天上降魔主&#xff0c;真是人间太岁神。 前言&#xff1a; 选项按钮是一种提供多项选择选项的方法&#xff0c;其中只有一个按钮可以处于激活状态&#xff0c;激活另一个按钮时将确保组中的所有其他按钮都已停用。我们可以使用嵌套在预制件中的预制件来实…

C++命名空间域namespace与域作用限制符: :,cin,cout输入输出简单介绍

TIPS C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式等C总计63个关键字&#xff0c;C语言32个关键字&#xff0c;具体没有必要先不去管它 域&#xff0c;命名空间域与namespace关键字 cpp需要解决的第一…

数据库中的视图及三级模式结构

文章目录 一、视图二、数据库三级模式结构 一、视图 简单地说&#xff0c;视图可以看成是一个窗口&#xff0c;它所反映的是一个表或若干表的局部数据&#xff0c;可以简化查询语句。视图一经定义&#xff0c;用户就可以把它当作表一样来查询数据。 但视图和基本表不同&#…

400以内的蓝牙耳机哪款好?400以内蓝牙耳机排行榜

谈起TWS&#xff0c;无论是传统的音频厂商还是手机厂商&#xff0c;都是其不可或缺的重要产品线&#xff0c;现在很多许多蓝牙耳机都不是千篇一律得形状&#xff0c;市场也鲜有商家在外观上下功夫&#xff0c;下面分享几款400元以内&#xff0c;内外兼具的耳机品牌。 一、南卡…

Pytorch实现图像风格迁移(一)

图像风格迁移是图像纹理迁移研究的进一步拓展&#xff0c;可以理解为针对一张风格图像和一张内容图像&#xff0c;通过将风格图像的风格添加到内容图像上&#xff0c;从而对内容图像进行进一步创作&#xff0c;获得具有不同风格的目标图像。基于深度学习网络的图像风格迁移主要…

LeetCode热题HOT100:76. 最小覆盖子串,84.柱状图中最大的矩形、96. 不同的二叉搜索树

LeetCode 热题 HOT 100 76. 最小覆盖子串 题目&#xff1a;给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 “” 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找的子字…

ADManager Plus:简化 Active Directory 管理的完美工具

在企业中&#xff0c;Active Directory&#xff08;AD&#xff09;是一个非常重要的组件&#xff0c;用于管理和控制所有计算机和用户的访问权限。然而&#xff0c;AD的管理和维护需要一定的技术能力和时间成本。为了简化这个过程&#xff0c;ManageEngine 推出了 ADManager Pl…