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学习之第三方包安装方法(两种方法)
Jul 30 Python
python实现汽车管理系统
Nov 30 Python
Python简单I/O操作示例
Mar 18 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
Jul 12 Python
python实现H2O中的随机森林算法介绍及其项目实战
Aug 29 Python
numpy库reshape用法详解
Apr 19 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 Python
PyCharm MySQL可视化Database配置过程图解
Jun 09 Python
通过实例解析python and和or使用方法
Nov 14 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 Python
Python3 用matplotlib绘制sigmoid函数的案例
Dec 11 Python
Python基础知识之变量的详解
Apr 14 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
php2html php生成静态页函数
2008/12/08 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
DOM 基本方法
2009/07/18 Javascript
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
js解决movebox移动问题
2016/03/29 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
JavaScript实现经典排序算法之选择排序
2016/12/28 Javascript
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
JS常见内存泄漏及解决方案解析
2020/05/30 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
Python设计模式之观察者模式实例
2014/04/26 Python
python中Flask框架简单入门实例
2015/03/21 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
pybind11在Windows下的使用教程
2019/07/04 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
如何利用python生成MD5并去重
2020/12/07 Python
浅谈css3新单位vw、vh、vmin、vmax的使用详解
2017/12/01 HTML / CSS
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
美国受信赖的教育产品供应商:Nest Learning
2018/06/14 全球购物
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
党员批评与自我批评
2014/02/12 职场文书
局火灾防控工作方案
2014/05/25 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
MySQL修炼之联结与集合浅析
2021/10/05 MySQL