python 内存分析工具_python内存监控工具memory_profiler和guppy的用法详解
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.py下get_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内存监控工具memory_profiler和guppy的用法详解相关推荐
- python内存池_python内存监控工具memory_profiler和guppy的用法详解
python内存监控工具memory_profiler和guppy的用法详解 发布时间:2020-08-21 19:44:58 来源:脚本之家 阅读:123 python2.7在内存管理上相比pyth ...
- java内存分析工具_java内存查看与分析
业界有很多强大的java profile的工具,比如Jporfiler,yourkit,这些收费的东西我就不想说了,想说的是,其实java自己就提供了很多内存监控的小工具,下面列举的工具只是一小部分, ...
- python dataframe index loc_基于DataFrame筛选数据与loc的用法详解
DataFrame筛选数据与loc用法 python中pandas下的DataFrame是一个很不错的数据结构,附带了许多操作.运算.统计等功能. 如何从一个DataFrame中筛选中出一个元素呢. ...
- python内存监控工具memory_profiler和guppy的用法
python2.7在内存管理上相比python3还是有些坑的,其释放后的内存仍然保留在python的内存池中,不被系统所用.python循环引用的变量不会被回收,这会导致程序越运行,占用的内存越大.我 ...
- linux 进程内存分析工具,Linux内存使用情况以及内存泄露分析之工具与方法
1. 内存使用情况分析 1.1 系统总内存分析 通过cat /proc/meminfo,可用的物理内存=MemFree+Buffers+Cached. MemTotal: 5933132 ...
- python音频分析工具_Python对音频进行测试及频谱分析
语音识别领域对音频文件进行频谱分析是一项基本的数据处理过程,同时也为后续的特征分析准备数据. 1.前驱知识 Python需要使用的相关库: wave https://docs.python.org/3 ...
- python中类的构成_Python中类型关系和继承关系实例详解
本文详细介绍了Python中类型关系和继承关系.分享给大家供大家参考.具体分析如下: 如果一个对象A持有另一个对象B的ID,那么检索到A之后就可以检索到B,我们就说存在一个A到B的导航.这种导航关系使 ...
- python io密集 多线程_python多进程和多线程究竟谁更快(详解)
python3.6 threading和multiprocessing 四核+三星250G-850-SSD 自从用多进程和多线程进行编程,一致没搞懂到底谁更快.网上很多都说python多进程更快,因为 ...
- python生成表格文件_python 读取excel文件生成sql文件实例详解
python 读取excel文件生成sql文件实例详解 学了python这么久,总算是在工作中用到一次.这次是为了从excel文件中读取数据然后写入到数据库中.这个逻辑用java来写的话就太重了,所以 ...
最新文章
- Strusts2 高危漏洞又来了,老项目自查起来!
- 2.1.1 Speed Limit
- 【STM32】FreeRTOS 其他任务 API 函数
- 使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库
- SAP 财务模块 FI-TV 差旅管理
- headerIP php_PHP使用curl伪造IP地址和header信息
- nginx图片过滤处理模块http_image_filter_module
- abp框架java,【Net】ABP框架学习之正面硬钢
- Mac OS/Linux命令查询网络端口占用情况
- Linux内存管理之基本概念介绍(一)
- jar 包的认识与处理、jar 文件 war 文件以及 ear 文件
- linux查看tomcat版本信息,linux下tomcat版本查看
- 数学建模 - 时间序列分析
- JDK各个版本的特性分析|JDK7|JDK8|JDK9|JDK10|JDK11|JDK12|JDK13特性分析
- QLineEdit屏蔽扫描枪输入自带回车的方法
- Linux CentOS安装增强功能--完整版命令
- High Reward Low Risk Strategies
- 多个考拉海购的商品主图如何一键批量保存
- java poodle,Java http客户端和POODLE
- SAP idoc功能够强大: 采购订单下达自动触发销售订单创建
热门文章
- 设计模式第三天 工厂模式
- 前端 node 使用 TSPL指令集操作 打印机不限品牌 (标签打印机,普通打印机)
- 怎么取消苹果手机自动续费_爱奇艺会员自动续费怎么取消?自动续费取消看这里...
- tensorflow如何使用训练好的模型做测试
- 中国改名最成功的 5 所大学:改名如改命
- 容器类(自定义容器类,List集合,LinkedList,HashSet)小结
- COALESCE函数
- 高并发 限流,到底限的什么鬼 (精品长文)
- 中国芯,SNS521系列水燃行业云芯产品获奖
- 利用Power BI行级安全性,限制用户访问权限