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

 更新时间:2015年02月18日 15:51:25   投稿:junjie  
这篇文章主要介绍了Python中使用MELIAE分析程序内存占用实例,本文直接给出使用代码示例,需要的朋友可以参考下

写的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 pandas之多级索引取值详解

    Python pandas之多级索引取值详解

    这篇文章主要为大家介绍了Python pandas之多级索引取值,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • 基于Python实现2种反转链表方法代码实例

    基于Python实现2种反转链表方法代码实例

    这篇文章主要介绍了基于Python实现2种反转链表方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 在CentOS 7中使用Python 3执行系统命令的详细教程

    在CentOS 7中使用Python 3执行系统命令的详细教程

    使用os.system()这个方法简单直接,但它不返回命令的输出,只返回命令的退出状态,如果你只需要知道命令是否成功执行,这个方法就足够了,这篇文章主要介绍了在CentOS 7中使用Python 3执行系统命令的详细教程,需要的朋友可以参考下
    2024-02-02
  • 解决PyCharm控制台输出乱码的问题

    解决PyCharm控制台输出乱码的问题

    今天小编就为大家分享一篇解决PyCharm控制台输出乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python 数据类型强制转换的总结

    python 数据类型强制转换的总结

    这篇文章主要介绍了python 数据类型强制转换的使用总结,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • 自适应线性神经网络Adaline的python实现详解

    自适应线性神经网络Adaline的python实现详解

    这篇文章主要介绍了自适应线性神经网络Adaline的python实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python开发如何在ubuntu 15.10 上配置vim

    Python开发如何在ubuntu 15.10 上配置vim

    这篇文章主要介绍了Python开发如何在ubuntu 15.10 上配置vim 的相关资料,需要的朋友可以参考下
    2016-01-01
  • Django中template for如何使用方法

    Django中template for如何使用方法

    这篇文章主要介绍了Django中template for如何使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • python 通过手机号识别出对应的微信性别(实例代码)

    python 通过手机号识别出对应的微信性别(实例代码)

    这篇文章主要介绍了python 通过手机号识别出对应的微信性别,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Python实现ATM系统

    Python实现ATM系统

    这篇文章主要为大家详细介绍了Python实现ATM系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02

最新评论