Python中使用MELIAE分析程序内存占用实例


Posted in Python onFebruary 18, 2015

写的dht协议搜索的程序,这几天优化了一下发现速度确实快了好多。但是出现了一个新的问题,内存直接飙升,我开了十个爬虫占用内存800m。开始我以为是节点太多了,找了几个小问题修改一下,发现没用。后来就到网上查找python内存分析的工具,查了一点资料发现python有个meliae库操作非常方便,就使用分析了一下,发现不是节点太多的原因0 0,是保存发送的t_id,用来标示返回的消息是那个发出的一个字典过大了。

从分析的结果非常容易的定位了某个对象的数量和大小,非常容易分析。我开始以为是因为好多发送查询信息以后,对面没返回造成这个字典里的元素没有释放造成的,我就用过期时间判断了一下,进行过期删除。发现是小了,但是不是非常显著,好像少了几十不到100M。后来又减少了查找一个随机hash的时间,以前是1分钟查一次,我改成了就第一次查!,发现没减少0 0.不知道是啥的原因。应该就是查找hash,询问节点,然后返回然后询问里边的节点,最后数量越来越多,但是我不明白的是,怎么会这么多运行一分钟就有60万条。也就是说当时内存没释放的对象就有这么多。达到这个内存占用后,基本就不再变化,有很小很慢的提升,因为还开的其他程序,不确定是不是这些程序其他对象的增加造成的。等分阶段dump测试一下。

安装直接pip install meliae 就ok了,我看好久没更新的项目了,不知道还有没有好的替代品不过用着还不错。

将内存dump到文件

 from meliae import scanner

 scanner.dump_all_objects('/tmp/dump%s.txt' % time.time())

分析文件:
 from meliae import loader

 #加载dump文件

 om = loader.load('/opt/log/dump.txt')

 #计算各Objects的引用关系

 om.compute_parents()

 #去掉各对象Instance的_dict_属性

 om.collapse_instance_dicts()

 #分析内存占用情况

 om.summarize()

字段意义如下:
Index : 行索引号
Count : 该类型的对象总数
%(Count) : 该类型的对象总数 占 所有类型的对象总数 的百分比
Size : 该类型的对象总字节数
%(Size) : 该类型的对象总字节数 占 所有类型的对象总字节数 的百分比
Cum : 累积行索引后的%(Size)
Max : 该类型的对象中,最大者的字节数
Kind : 类型

分析某个对象,找出它的引用关系

 #得到所有的POP3ClientProtocol对象

 p = om.get_all('POP3ClientProtocol')

 #查看第一个对象

 p[0]

 #可以查看该对象的所有引用

 p[0].c

 #查看谁引用了这个对象

 p[0].p
Python 相关文章推荐
python 字符串split的用法分享
Mar 23 Python
python list使用示例 list中找连续的数字
Jan 27 Python
Python开发的HTTP库requests详解
Aug 29 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
Apr 27 Python
Python判断两个list是否是父子集关系的实例
May 04 Python
详解python校验SQL脚本命名规则
Mar 22 Python
python实现飞机大战游戏
Oct 26 Python
python类中super() 的使用解析
Dec 19 Python
python将unicode和str互相转化的实现
May 11 Python
Django ORM filter() 的运用详解
May 14 Python
python如何安装下载后的模块
Jul 03 Python
浅谈Python数学建模之固定费用问题
Jun 23 Python
Python中的__SLOTS__属性使用示例
Feb 18 #Python
Python contextlib模块使用示例
Feb 18 #Python
Python中使用Inotify监控文件实例
Feb 14 #Python
Python中实现的RC4算法
Feb 14 #Python
Python脚本实现网卡流量监控
Feb 14 #Python
Centos5.x下升级python到python2.7版本教程
Feb 14 #Python
Python脚本实现DNSPod DNS动态解析域名
Feb 14 #Python
You might like
php split汉字
2009/06/05 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
Chrome中JSON.parse的特殊实现
2011/01/12 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
使用text方法获取Html元素文本信息示例
2014/09/01 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
js通过iframe加载外部网页的实现代码
2015/04/05 Javascript
Javascript技术难点之apply,call与this之间的衔接
2015/12/04 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
2016/03/07 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
从多个tfrecord文件中无限读取文件的例子
2020/02/17 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
浅谈TensorFlow中读取图像数据的三种方式
2020/06/30 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
Python基于callable函数检测对象是否可被调用
2020/10/16 Python
CSS3 边框效果
2019/11/04 HTML / CSS
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
财务管理专业毕业生求职信范文
2013/09/21 职场文书
高校毕业生自我鉴定
2013/10/27 职场文书
积极分子思想汇报
2014/01/04 职场文书
计算机求职信
2014/07/02 职场文书
关于迟到的检讨书
2015/05/06 职场文书
爱的教育读书笔记
2015/06/26 职场文书
导游词之五台山
2019/10/11 职场文书
Mysql 用户权限管理实现
2021/05/25 MySQL
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers
Oracle删除归档日志及添加定时任务
2022/06/28 Oracle