0

0

Python 内存快照对比分析方法

冷漠man

冷漠man

发布时间:2026-02-13 23:12:04

|

590人浏览过

|

来源于php中文网

原创

python内存快照对比分析有四种方法:一、用tracemalloc追踪堆内存分配并比对行级差异;二、用objgraph统计指定类型对象数量变化;三、用gc模块获取对象列表并比对id集合识别新增对象;四、用pympler的summarytracker进行多维度内存差异报告。

python 内存快照对比分析方法

如果您需要识别 Python 程序运行过程中对象数量或内存占用的异常变化,则可能需对不同时间点的内存状态进行快照采集与逐项比对。以下是实现 Python 内存快照对比分析的多种方法:

一、使用 tracemalloc 捕获并比较堆内存分配

tracemalloc 是 Python 标准库内置模块,可精确追踪 Python 对象的内存分配来源,支持在两个时间点分别获取快照,并直接计算差异。

1、在程序起始位置调用 tracemalloc.start() 启用内存跟踪。

2、执行待测代码段后,调用 snapshot1 = tracemalloc.take_snapshot() 获取第一个快照。

立即学习Python免费学习笔记(深入)”;

3、继续执行另一段逻辑(如循环迭代、对象创建等),再调用 snapshot2 = tracemalloc.take_snapshot() 获取第二个快照。

4、调用 top_stats = snapshot2.compare_to(snapshot1, 'lineno') 计算新增内存分配行级统计。

5、遍历 top_stats 并打印前 10 条差异项,例如 print(stat)

二、利用 objgraph 生成对象引用图并比对对象数量变化

objgraph 可以统计指定类型对象的实时数量,并可视化其引用关系;通过两次调用统计函数,可定位新增或未释放的对象类型。

1、安装依赖:pip install objgraph

2、在关键节点处调用 objgraph.show_growth(limit=10) 输出当前增长最显著的 10 类对象及其增量。

3、若需定向比对某类对象,先执行 before = objgraph.count('dict') 记录初始数量。

4、运行目标逻辑后,再次执行 after = objgraph.count('list')(可替换为其他类型如 'function'、'tuple')。

网龙b2b仿阿里巴巴电子商务平台
网龙b2b仿阿里巴巴电子商务平台

本系统经过多次升级改造,系统内核经过多次优化组合,已经具备相对比较方便快捷的个性化定制的特性,用户部署完毕以后,按照自己的运营要求,可实现快速定制会费管理,支持在线缴费和退费功能财富中心,管理会员的诚信度数据单客户多用户登录管理全部信息支持审批和排名不同的会员级别有不同的信息发布权限企业站单独生成,企业自主决定更新企业站信息留言、询价、报价统一管理,分系统查看分类信息参数化管理,支持多样分类信息,

下载

5、计算差值:delta = after - before,并判断 delta > 0 是否成立。

三、通过 gc 模块手动触发垃圾回收并检查不可达对象残留

Python 的垃圾回收器(gc)默认管理循环引用,但某些场景下对象可能滞留于 gc.garbage 或未被及时回收;通过对比 gc.get_objects() 结果可发现潜在泄漏对象。

1、在分析起点前调用 import gc; gc.collect() 清理已知可回收对象。

2、执行 objs1 = gc.get_objects() 获取当前所有活动对象列表。

3、运行待测逻辑后,再次调用 gc.collect() 并获取新对象列表:objs2 = gc.get_objects()

4、构造两组对象 ID 集合:ids1 = set(id(o) for o in objs1)ids2 = set(id(o) for o in objs2)

5、计算新增对象集合:new_ids = ids2 - ids1,然后遍历其中部分 ID 查看类型:type(gc.get_referrers(list(new_ids)[0])[0])

四、借助 pympler 进行多维度内存快照与差异报告

pympler 提供 Asizer 类支持跨时间点的对象大小汇总与对比,能按模块、类名或引用路径分类统计,适用于复杂应用的内存审计。

1、安装工具:pip install pympler

2、初始化分析器:from pympler import tracker; tr = tracker.SummaryTracker()

3、首次记录快照:tr.print_diff()(首次调用输出基准摘要)。

4、执行目标操作后,再次调用 tr.print_diff(),自动显示自上次以来各类型对象的数量与总尺寸变化。

5、如需导出结构化差异,调用 diff = tr.diff() 获取字典格式结果,并筛选 [d for d in diff if d[2] > 10240](仅显示增长超 10KB 的项)。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

347

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

423

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

784

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

356

2025.07.23

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

11

2026.02.03

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

810

2023.08.22

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

199

2023.11.20

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

23

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.2万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号