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 相关文章推荐
Windows系统下使用flup搭建Nginx和Python环境的方法
Dec 25 Python
python删除某个字符
Mar 19 Python
python抽取指定url页面的title方法
May 11 Python
Python实现计算字符串中出现次数最多的字符示例
Jan 21 Python
Python批量生成特定尺寸图片及图画任意文字的实例
Jan 30 Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 Python
python抓取搜狗微信公众号文章
Apr 01 Python
Python爬虫运用正则表达式的方法和优缺点
Aug 25 Python
用Python做一个久坐提醒小助手的示例代码
Feb 10 Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 Python
python有几个版本
Jun 17 Python
基于Python实现股票收益率分析
Apr 02 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
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
javascript重写alert方法的实例代码
2013/03/29 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
javascript动态生成树形菜单的方法
2015/11/14 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
2016/12/18 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
Vue学习之路之登录注册实例代码
2017/07/06 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
js实现前面自动补全位数的方法
2018/10/10 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
Python实现感知器模型、两层神经网络
2017/12/19 Python
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
python制作图片缩略图
2019/04/30 Python
python多线程下信号处理程序示例
2019/05/31 Python
python适合人工智能的理由和优势
2019/06/28 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
说出你对remoting 和webservice的理解和应用
2014/06/08 面试题
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
石油大学毕业生自荐信
2014/01/28 职场文书
2014年营销工作总结
2014/11/22 职场文书
2016新年慰问信范文
2015/03/25 职场文书
高中班主任心得体会
2016/01/07 职场文书
python 多态 协议 鸭子类型详解
2021/11/27 Python