追踪代码申请的内存大小

tracemalloc

为python代码{%code%}添加如下代码:

追踪这片代码所涉及的内存申请过程,包括所申请内存的大小

对记录结果进行分析:

可以查看自己所写的代码所申请内存空间大小的变化情况

memory_profiler

结果:

objgraph+gc

结果

在gdb输入处键入

得到描述对象之间关系(引用链)的图像

objgraph.show_growth

通过两次objgraph.show_growth()的调用环境差异得到内存中增加的对象。

结果

在调用完func_to_leak()之后,内存中还存在着OBJ实例

objgraph.show_most_common_types给出程序上下文中占用内存的数量较多的变量类型,默认给出最多的前十种

输出结果

注释掉gc.disable语句,输出结果(30种最多的变量类型)

可以看到,有一半的OBJ实例没有被回收,存在内存泄漏

pympler

打印结果

监测内存中变量类型的变化

guppy

安装pip install guppy3

打印结果

结果比较粗糙,只能看到numpy.ndarray类型变量所占内存空间有增有减,其他类型变量所占内存空间没有变化,没什么参考意义,不好用

对打印结果进行统计,代码如下,提取关键打印内容和画图的代码跟下一节的结果分析代码相同

mem_top

安装pip install mem_top

打印结果

mem_top里参数limit控制显示最高占用量的对象,refs是指包含最多引用的对象,bytes是指占用内存空间最多的对象,types是指数量最多的对象类型。代码实现细节参见denis-ryzhkov/mem_top。间隔一段时间长时间观测,就能发现端倪。python进程内存占用持续增高排查经验分享,mem_top统计整个进程的内存占用情况,只要程序A的代码不变且mem_top被包含在程序A的代码里,无论mem_top插在哪里都是相同的结果。

附上mem_top结果的分析代码,以观察什么因素在增高导致内存泄露

memprof

代码运行目录下会生成func.log和func.png(描述func中的占用内存空间超过1MB的变量的内存使用量随着时间的变化情况)

参考链接:

python3使用迭代生成器yield减少内存占用

避免python内存泄漏的有效方法

使用gc、objgraph干掉python内存泄露与循环引用!

记一次python内存泄露的解决过程

python 内存诊断

mem-top 0.2.1

Memprof

创建于202411052157,修改于202412012056

posted @   园糯  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2020-11-05 maven: can't resolve plugin xxxmaven-xxxx-plugin:x.x
点击右上角即可分享
微信分享提示