python内存监控工具memory_profiler和guppy的用法详解


Posted in Python onJuly 29, 2019

python2.7在内存管理上相比python3还是有些坑的,其释放后的内存仍然保留在python的内存池中,不被系统所用。python循环引用的变量不会被回收,这会导致程序越运行,占用的内存越大。我在跑py-faster-rcnn的demo时,基本上跑2000张图像,16g内存就要爆了。于是尝试用python的内存监控工具来调试程序,找到不能膨胀的变量,然后del之,再手动回收内存gc.collec()

下面是我用的两个内存监视工具,一个是按每行代码查看内存占用的工具memory_profiler,一个是查看占用内存前十位变量的工具guppy。

1. memory_profiler

首先是安装:

pip install -U memory_profiler

然后用profile修饰想要查看的函数名:如:

@profile
def my_func():
 a = [1] * (10 ** 6)
 b = [2] * (2 * 10 ** 7)
 del b
 return a

if __name__ == '__main__':
 my_func()

输出结果:

Line #    Mem usage  Increment   Line Contents
==============================================
     3                           @profile
     4      5.97 MB    0.00 MB   def my_func():
     5     13.61 MB    7.64 MB       a = [1] * (10 ** 6)
     6    166.20 MB  152.59 MB       b = [2] * (2 * 10 ** 7)
     7     13.61 MB -152.59 MB       del b
     8     13.61 MB    0.00 MB       return a

memory_profiler功能强大,更多功能可以看官网这里

2. guppy

首先安装:

pip install guppy

然后import下

from guppy import hpy
hxx = hpy()
heap = hxx.heap()
byrcs = hxx.heap().byrcs;

在主程序下增加:

print(heap)

输出示例:

Index Count %  Size % Cumulative % Kind (class / dict of class)
  0 10124 22 81944416 95 81944416 95 list
  1 16056 34 1325464 2 83269880 96 str
  2 9147 20 745616 1 84015496 97 tuple
  3 102 0 366480 0 84381976 98 dict of module
  4 287 1 313448 0 84695424 98 dict of type
  5 2426 5 310528 0 85005952 98 types.CodeType
  6 2364 5 283680 0 85289632 99 function
  7 287 1 256960 0 85546592 99 type
  8 169 0 192088 0 85738680 99 dict (no owner)
  9 123 0 142728 0 85881408 99 dict of class

可以看到第一个list占了95%的内存,若print(heap)在主程序的循环中,可以查看每次循环后的变量内存占用情况。

输入以下命令,查看这个占内存最大的list中的数据类型:
byrcs[0].byid

最后测试后发现,test.pyget_im_blob等函数占用内存不断增大,每检测一副图像,该函数增加6-10MB内存开销。但奇怪的是用guppy查看前十个变量,并没有发现哪个变量有明显的内存增大迹象。于是猜测可能是每张图像推理后,推理的结果bbox,label,img等数据保存在了内存中,这样方便所有图像推理结束后,plt.show().于是修改程序,每张图像推理后,plt.show()一下。用memory_profiler发现内存不再继续增大,interesting!其实把plt.show()改成plt.close()也可以防止内存不断增大。具体原因肯定是python 的内存回收机制规则导致的。

总结

以上所述是小编给大家介绍的python内存监控工具memory_profiler和guppy的用法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python使用mysqldb连接数据库操作方法示例详解
Dec 03 Python
python基础_文件操作实现全文或单行替换的方法
Sep 04 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
Python面向对象程序设计类的封装与继承用法示例
Apr 12 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
Python有参函数使用代码实例
Jan 06 Python
tensorflow 实现数据类型转换
Feb 17 Python
解决json中ensure_ascii=False的问题
Apr 03 Python
基于python代码批量处理图片resize
Jun 04 Python
学python需要去培训机构吗
Jul 01 Python
Python入门学习之类的相关知识总结
May 25 Python
Python实现老照片修复之上色小技巧
Oct 16 Python
Python 硬币兑换问题
Jul 29 #Python
django中使用Celery 布式任务队列过程详解
Jul 29 #Python
详解python中自定义超时异常的几种方法
Jul 29 #Python
Python 离线工作环境搭建的方法步骤
Jul 29 #Python
如何通过python的fabric包完成代码上传部署
Jul 29 #Python
Python八皇后问题解答过程详解
Jul 29 #Python
python 标准差计算的实现(std)
Jul 29 #Python
You might like
php添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
php实现购物车功能(下)
2016/01/05 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
php实现网页端验证码功能
2017/07/11 PHP
PHP7 新增功能
2021/03/09 PHP
mapper--图片热点区域高亮组件官方站点
2007/12/22 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
小程序分享链接onShareAppMessage的具体用法
2020/05/22 Javascript
React实现评论的添加和删除
2020/10/20 Javascript
python+django+sql学生信息管理后台开发
2018/01/11 Python
python3爬取各类天气信息
2018/02/24 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
Python修改列表值问题解决方案
2020/03/06 Python
python中adb有什么功能
2020/06/07 Python
如何理解python对象
2020/06/21 Python
python 通过exifread读取照片信息
2020/12/24 Python
微软台湾官方网站:Microsoft台湾
2018/08/15 全球购物
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
怎么写好自荐信
2013/10/30 职场文书
大学本科毕业生求职信范文
2013/12/18 职场文书
2014年教师业务学习材料
2014/05/12 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
2015年汽车销售工作总结
2015/04/07 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书
怎样做好公众演讲能力?
2019/08/28 职场文书