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

Python-tracemalloc-跟踪内存分配

tracemalloc 模块是一个用于对 python 已申请的内存块进行debug的工具。它能提供以下信息:

  • 定位对象分配内存的位置

  • 文件、按行统计python的内存块分配情况: 总大小、块的数量以及块平均大小。

  • 对比两个内存快照的差异,以便排查内存泄漏

显示前10项

显示内存分配最多的10个文件:

import tracemalloctracemalloc.start()
# --- 业务代码 start ---
n = 10000000
s = 0
for i in range(1, n):s *= i
# --- 业务代码 end ---
snapshot = tracemalloc.take_snapshot()  # 内存摄像
top_stats = snapshot.statistics('lineno')  # 内存占用数据获取print('[Top 10]')
for stat in top_stats[:10]:  # 打印占用内存最大的10个子进程print(stat)# [Top 10]
# D:/MyPython/tracemalloc/demo.py:5: size=576 B, count=1, average=576 B
# D:/MyPython/tracemalloc/demo.py:7: size=28 B, count=1, average=28 B

 TOP1:代码第五行占用内存大小576B

 计算差异

获取两个快照并显示差异:

import tracemalloctracemalloc.start()
snapshot0 = tracemalloc.take_snapshot()  # 第一张快照
# --- 业务代码 start ---
n = 10000000
s = 0
for i in range(1, n):s *= i
# --- 业务代码 end ---
snapshot1 = tracemalloc.take_snapshot()  # 第二张快照
top_stats = snapshot1.compare_to(snapshot0, 'lineno')  # 快照对比print('[Top 10 differences]')
for stat in top_stats[:10]:print(stat)# [Top 10 differences]
# D:/MyPython/tracemalloc/demo.py:27: size=576 B (+576 B), count=1 (+1), average=576 B
# D:\Program Files\anaconda3\lib\tracemalloc.py:397: size=88 B (+88 B), count=2 (+2), average=44 B
# D:\Program Files\anaconda3\lib\tracemalloc.py:534: size=48 B (+48 B), count=1 (+1), average=48 B
# D:\Program Files\anaconda3\lib\tracemalloc.py:291: size=40 B (+40 B), count=1 (+1), average=40 B
# D:/MyPython/tracemalloc/demo.py:31: size=28 B (+28 B), count=1 (+1), average=28 B

 TOP1:代码第27行占用内存大小增加了576B


参考: 

tracemalloc --- 跟踪内存分配 — Python 3.7.13 文档
https://docs.python.org/zh-cn/3.7/library/tracemalloc.html#module-tracemalloc

python3使用tracemalloc追踪mmap内存变化 - DECHIN - 博客园
https://www.cnblogs.com/dechinphy/p/mmap.html

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

相关文章:

  • 02 CSS技巧
  • Yarn资源调度器
  • android上架备案公钥和md5获取工具
  • SpringBoot系列(12):SpringBoot集成log4j2日志配置
  • HTML事件列表
  • 并发-Executor框架笔记
  • 【C进阶】分析 C/C++程序的内存开辟与柔性数组(内有干货)
  • 深入理解 JVM 之——字节码指令与执行引擎
  • C++:vector
  • Android Automotive编译
  • 什么是50ETF期权开户条件,怎么开期权交易权限?
  • React 从入门到精通——本文来自AI创作助手
  • 【51单片机实验笔记】前篇(三) 模块功能封装汇总(持续更新)
  • Excel VSTO开发4 -其他事件
  • 语音识别数据的采集方法:基本流程数据类型
  • oracle数据库给用户授权DBA权限Oracle查看哪些用户具有DBA权限
  • 024-从零搭建微服务-系统服务(六)
  • Arduino驱动TCS3200传感器(颜色传感器篇)
  • 基于Matlab实现多个数字水印案例(附上源码+数据集)
  • C语言之指针进阶篇(2)
  • C++ 进制转化入门知识(1)
  • 【React】React学习:从初级到高级(四)
  • 微信小程序登录问题(思路简略笔记)
  • Go 锁扩展
  • Docker的简介及安装
  • 安卓核心板的不同核心规格及架构介绍
  • flume1.11.0安装部署
  • 通过wordpress 自定义主题的额外CSS删除指定区块
  • Rokid Jungle--Max pro
  • 【LeetCode算法系列题解】第61~65题