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

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
  • 1

在这里插入图片描述

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

run命令使用

  • python3 -m memray run --help 获取帮助
    在这里插入图片描述
参数作用
-oOUTPU,–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运行时不显示任何特定于跟踪的输出
-c不使用 lz4 压缩生成的文件
-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文件进行分析,生成详细报告

在这里插入图片描述

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

  1. 文档获取方式:

  2. 加入我的软件测试交流群:680748947免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Revit模型进入虚幻引擎UE5教程

一、背景 小伙伴们是否有Revit进入虚幻引擎交互的需求呢? 二、实现功能 1.Revit进入虚幻UE5,包含模型属性,材质等 2.实现BIM构件点选,高亮,属性展示 3.实现BIM模型分层显示,爆炸等效果 三、教程地址 教程&#x…

51单片机入门_江协科技_21~22_OB记录的笔记

21. LED点阵屏 21.1. LED点阵屏介绍 •LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列,以灯珠亮灭来显示文字、图片、视频等。LED点阵屏广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等 •LED点阵屏分类 按颜色:单…

Leetcode 64. 最小路径和

心路历程: 第一反应像是一个回溯问题,但是看到题目中要求最值,大概率是一道DP问题。并且这里面的递推关系也很明显。 这里面边界条件可以有多种处理方法。 解法:动态规划 class Solution:def minPathSum(self, grid: List[List…

六、企业级架构缓存篇之memcached

一、memcached概述 1、网站架构优化流程: LNMP架构中网站应用访问流程: 浏览器 (app) → web 服务器 → 后端服务 (php) → 数据库 (mysql) 访问流程越多,访问速度越慢,出现问题的几率也越大。 网站访问流程优化思路&#xff1…

ps教程谁教的好

在Photoshop(PS)教程方面,有多位老师被推荐为教学水平较高。以下是一些被提及的老师: 敬伟:被认为是很多人的PS启蒙老师,提供基本功能介绍与高级效果案例,教学风格被认为是免费且不拖沓的。1…

【机器学习】如何通过群体智慧解决机器学习的挑战“

机器学习的发展日新月异,但其成功实施的关键之一仍然是获取高质量的、标注良好的数据集。在这篇文章中,我们将探讨如何通过群体智慧来构建和改善机器学习的数据集,尤其是通过reCAPTCHA和带有目的的游戏(Games with a Purpose, GWA…

开发语言漫谈-C语言

个人认为C语言是最伟大的开发语言(没有之一)。C语言开创了高级语言的新时代。比C更低级的是汇编语言,这个东西就是反人类的玩意。之后的语言或多或少都受C语言的影响。更神奇的是直到现在,C语言还有生命力。C语言的发明人丹尼斯里…

比nestjs更优雅的ts控制反转策略-依赖查找

一、Cabloy5.0内测预告 Cabloy5.0采用TS对整个全栈框架进行了脱胎换骨般的大重构,并且提供了更加优雅的ts控制反转策略,让我们的业务开发更加快捷顺畅 1. 新旧技术栈对比: 后端前端旧版js、egg2.0、mysqljs、vue2、framework7新版ts、egg3…

Web大并发集群部署之集群介绍

一、传统web访问模型 传统web访问模型完成一次请求的步骤 1)用户发起请求 2)服务器接受请求 3)服务器处理请求(压力最大) 4)服务器响应请求 传统模型缺点 单点故障; 单台服务器资源有限&…

Prometheus+grafana环境搭建MongoDB(docker+二进制两种方式安装)(五)

由于所有组件写一篇幅过长,所以每个组件分一篇方便查看,前四篇mongodb的exporter坑也挺多总结一下各种安装方式,方便后续考古。 Prometheusgrafana环境搭建方法及流程两种方式(docker和源码包)(一)-CSDN博客 Prometheusgrafana环境搭建rabb…

使用阿里云试用Elasticsearch学习:1.4 基础入门——映射和分析

当摆弄索引里面的数据时,我们发现一些奇怪的事情。一些事情看起来被打乱了:在我们的索引中有12条推文,其中只有一条包含日期 2014-09-15 ,但是看一看下面查询命中的 总数 (total): GET /_searc…

如何利用GitHub和jsDelivr托管图片cdn

1、背景 https://cdn.jsdelivr.net/gh/axh2018/axh2018.github.io/medias/banner/6.jpg 这个链接是如何生成的?免费吗? 2、解决 这个链接看起来是使用了 jsDelivr 服务来托管在 GitHub 上的静态文件。jsDelivr 是一个免费的开源 CDN (Content Deliver…

【关于窗口移动求和的两种计算方法】

窗口移动计算方法 例子方法1方法2运行结果: 例子 在很多算法中都会涉及到窗口滑动,比如基于新息序列更新的自适应卡尔曼滤波器算法中便会使用到。 已知一个数列:OCV [1;2;3;4;5;6;7;8;9;10;11;12;13;14;15],定义窗口长度为5,每次…

小林coding图解计算机网络|TCP篇06|如何理解TCP面向字节流协议、为什么UDP是面向报文的协议、如何解决TCP的粘包问题?

小林coding网站通道:入口 本篇文章摘抄应付面试的重点内容,详细内容还请移步:小林coding网站通道 文章目录 如何理解UDP 是面向报文的协议如何理解字节流如何解决粘包固定长度的消息 特殊字符作为边界自定义消息结构 如何理解UDP 是面向报文的…

MFC中数据转化

目录 1.CString数据转化为int类型数据 2.int类型转化为CString类型数据 3.MFC中CString数据类型 转换为std::string数据类型 4.MFC中std::string数据类型 转换为CString数据类型 1.CString数据转化为int类型数据 在MFC中,将CString类型数据转换为int类型数据&a…

Hadoop-入门

资料来源:尚硅谷-Hadoop 一、Hadoop 概述 1.1 Hadoop 是什么 1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 2)主要解决:海量数据的存储和海量数据的分析计算问题。 3)广义上来说,Hadoop…

数据结构--最长公共前缀

数据结构–最长公共前缀 方法一: 分析 首先找到最小长度的字符串,然后把其与每一个与每一个字符串查找索引,判断其是不是第一个(索引为0),若其是,则计数的加一,当计数等于字符数组长度,即每个…

深入浅出 -- 系统架构之分布式常见理论概念

随着计算机科学和互联网的发展,分布式场景变得越来越常见,能否处理好分布式场景下的问题,成为衡量一个工程师是否合格的标准。本文我们介绍下分布式系统相关的理论知识,这些理论是我们理解和处理分布式问题的基础。 CAP理论 CAP…

深入理解选择排序:算法原理、Java实现与性能优劣

算法学习的重要性 在程序员的世界里,算法就如同一座桥梁,连接着问题与解决方案,是实现优秀程序的关键。 掌握算法,就能够在面对各种问题时,找到最合适的解决方法,以最少的时间和空间,实现最优的…

Android数据存储技术

一、文件存储 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"vertical"android:layout_width"match_parent"android:layout_height"match_parent" ><EditTextandroid:id&qu…