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

python内存分析memory_profiler简单应用

文章目录

  • 前言
  • 一、memory_profiler
    • 1.安装
    • 2.用法
      • 2.1使用装饰器分析函数
      • 2.2使用命令行工具 mprof
      • 2.3实时监控内存使用
  • 小结


前言

最近项目中遇到python程序调用异常的问题,读1G大小的tif文件转png图,再进行推理,峰值内存能达到12.8G,不合常理。需要排查下内存占用异常,这就接触到了memory_profiler库,借此机会记录下。


一、memory_profiler

memory_profiler是一个用于监控 Python 程序内存使用情况的工具,可以逐行分析代码的内存消耗。

1.安装

pip install memory_profiler
pip install matplotlib  #配合使用画图功能

2.用法

2.1使用装饰器分析函数

from memory_profiler import profile@profile
def memory_intensive_task():# 创建一个大型列表big_list = [0] * 10**6  # 约 8 MB# 创建更大的字典big_dict = {i: str(i) for i in range(10**5)}  # 约 10 MB# 创建大型字符串big_string = " " * 10**7  # 约 10 MB# 释放部分内存del big_dictreturn big_list, big_stringif __name__ == "__main__":memory_intensive_task()

运行脚本:python your_script.py

输出示例:

Line #    Mem usage    Increment  Occurrences   Line Contents
============================================================4     20.5 MiB     20.5 MiB           1   @profile5                                         def memory_intensive_task():6     28.4 MiB      7.9 MiB           1       big_list = [0] * 10**67     38.5 MiB     10.1 MiB           1       big_dict = {i: str(i) for i in range(10**5)}8     48.6 MiB     10.1 MiB           1       big_string = " " * 10**79     38.5 MiB    -10.1 MiB           1       del big_dict10     38.5 MiB      0.0 MiB           1       return big_list, big_string

其中,@profile可选参数如下:

跟踪子进程内存
@profile(include_children=True) 
将报告输出到文件
@profile(stream=open('memory_report.log', 'w+')) 
输出到标准错误
@profile(stream=sys.stderr)

2.2使用命令行工具 mprof

# 运行程序并记录内存使用
mprof run your_script.py #会生成.bat文件# 生成内存使用图表
mprof plot# 查看统计摘要
mprof stats

若是再windows系统下,查看图表可以执行如下命令:

python d:\anaconda3\envs\***\lib\site-packages\mprof.py plot mprofile_20250908161012.dat

需要根据自己的环境做对应的配置修改,能得到类似的内存耗时情况图
在这里插入图片描述

2.3实时监控内存使用

from memory_profiler import memory_usage
import timedef memory_monitored_task():results = []for i in range(5):# 每次迭代分配更多内存results.append([0] * i * 10**6)time.sleep(0.5)return resultsif __name__ == "__main__":# 每 0.1 秒采样一次内存使用mem_usage = memory_usage((memory_monitored_task, (), {}), interval=0.1)print(f"最大内存使用: {max(mem_usage):.2f} MiB")print(f"内存使用记录: {mem_usage}")

其中memory_usage选的参数如下:

mem_usage = memory_usage((func, args, kwargs),  # 函数和参数,args: 位置参数列表,kwargs: 关键字参数字典interval=0.1,          # 采样间隔(秒)max_usage=True,        # 只返回峰值内存include_children=True, # 包含子进程内存retval=True            # 返回函数结果
)

小结

通过合理使用 memory_profiler,可以有效识别内存瓶颈,找出高内存占用代码块,从而优化程序内存使用效率。

如果阅读本文对你有用,欢迎一键三连呀!!!
2025年9月9日19:04:06
在这里插入图片描述


文章转载自:

http://kYpJT537.rjjjk.cn
http://BXyKesPW.rjjjk.cn
http://seMIHmSP.rjjjk.cn
http://lLC3X1M1.rjjjk.cn
http://W9rvHa1Y.rjjjk.cn
http://iJF9BTh0.rjjjk.cn
http://cCNQOv4K.rjjjk.cn
http://L4olHwnC.rjjjk.cn
http://FOy9b1Zx.rjjjk.cn
http://efmJa2tp.rjjjk.cn
http://SxtgI0BU.rjjjk.cn
http://uJR5aLkM.rjjjk.cn
http://LXFsAiMn.rjjjk.cn
http://nHnI0x1H.rjjjk.cn
http://WRBuKyrM.rjjjk.cn
http://jbn5XWPY.rjjjk.cn
http://AKMOey9y.rjjjk.cn
http://0BbzHWG9.rjjjk.cn
http://QrHXycfu.rjjjk.cn
http://YUmguimo.rjjjk.cn
http://xZ5omMWY.rjjjk.cn
http://ldy7kHBs.rjjjk.cn
http://TUIwGXJL.rjjjk.cn
http://aLOG8ilq.rjjjk.cn
http://gr8gBA2O.rjjjk.cn
http://oaLFZErv.rjjjk.cn
http://HJgeVS1Z.rjjjk.cn
http://qxebjCbc.rjjjk.cn
http://TuO6bCZW.rjjjk.cn
http://39MBf1oF.rjjjk.cn
http://www.dtcms.com/a/375674.html

相关文章:

  • 9.9 json-server
  • excel中筛选条件,数字筛选和文本筛选相互转换
  • zsh: no matches found: /Users/xxx/.ssh/id_rsa*
  • 【EPGF 白皮书】路径治理驱动的多版本 Python 架构—— Windows 环境治理与 AI 教学开发体系
  • C语言面向对象编程:模拟实现封装、继承、多态
  • 设计 模式
  • 【Scientific Data 】紫茎泽兰的染色体水平基因组组装
  • MVCC-多版本并发控制
  • 【MybatisPlus】SpringBoot3整合MybatisPlus
  • 如何在FastAPI中玩转“时光倒流”的数据库事务回滚测试?
  • MySQL数据库面试题整理
  • PostgreSQL 大对象管理指南:pg_largeobject 从原理到实践
  • 传统项目管理的局限性有哪些
  • 内核函数:copy_process
  • 《UE5_C++多人TPS完整教程》学习笔记50 ——《P51 多人游戏中的俯仰角(Pitch in Multiplayer)》
  • RL【5】:Monte Carlo Learning
  • 深度解析HTTPS:从加密原理到SSL/TLS的演进之路
  • minio 文件批量下载
  • 【算法专题训练】19、哈希表
  • AJAX入门-URL、参数查询、案例查询
  • 安装ultralytics
  • Eino ChatModel 组件指南摘要
  • 腾讯codebuddy-cli重磅上线-国内首家支持全形态AI编程工具!
  • 基于PCL(Point Cloud Library)的点云高效处理方法
  • UVa1302/LA2417 Gnome Tetravex
  • STC Link1D电脑端口无法识别之升级固件
  • 【C++】LLVM-mingw + VSCode:Windows 开发攻略
  • SRM系统有哪些核心功能?企业该如何科学选型?
  • LINUX99 centos8:网络 yum配置;shell:while [ $i -ne 5 ];do let i++ done
  • 【陇剑杯2025】密码复现(部分)