zoukankan      html  css  js  c++  java
  • [转] python运行时内存分析工具meliae

    转自:https://my.oschina.net/markco/blog/601773

    利用meliae来监控python进程的内存占用情况 

    meliae是一个python进程内存占用监控、分析工具,它的安装需要依赖pyrex包。

    一、安装:

    安装python内存分析工具
    sudo pip install cython
    sudo pip install meliae

    二、使用:

    meliae会把某个时刻的内存给dump到一个文件中,然后再对该文件进行分析,当我们的某个python程序占用内存很大,可能有内存泄露发生时,可以使用该工具来进行检测分析。

    scanner.dump_all_objects()
    
    om = loader.load()
    om.compute_parents()
    om.collapse_instance_dicts()
    print om.summarize()

    1、在需要dump内存的地方,写上以下代码即可:

    from meliae import scanner

    scanner.dump_all_objects('/opt/log/dump.txt')

    这样,我们就可以把当前的内存Objects都导出到了dump.txt。

    2、然后再进行分析:

    from meliae import loader

    #加载dump文件

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

    #计算各Objects的引用关系

    om.compute_parents()

    #去掉各对象Instance的_dict_属性

    om.collapse_instance_dicts()

    #分析内存占用情况

    print om.summarize()

    3、我的某个python程序分析结果如下:

    Total 333015 objects, 188 types, Total size = 52.8MiB (55414199 bytes)

    Index Count % Size % Cum Max Kind

    0 10620 3 18096480 32 32 1704 POP3ClientProtocol

    1 133004 39 6290033 11 44 31457 str

    2 10628 3 5866656 10 54 552 Connector

    3 10628 3 5866656 10 65 552 POP3ClientFactory

    …….

    从上面可以看到,共有333015个对象,占用了52M的内存

    其中,共有10620个POP3ClientProtocol对象实例,占用了32%约18M的内存

    最大的对象也只占用了1.7K的内存,但由于对象很多,所以最终它占用的内存就很大了

    那么,我们就大概知道了内存泄露的地方,就是这个POP3ClientProtocol对象,在使用完成之后,没有释放造成的

    我们还可以继续分析某个对象,找出它的引用关系

    #得到所有的POP3ClientProtocol对象  

    p = om.get_all('POP3ClientProtocol')  

    #查看第一个对象  

    p[0]  

    说明该对象的地址为2803894924,占用了1.7K内存,引用了51个对象,它被1个对象所引用  

    >>>POP3ClientProtocol(2803894924 1704B 51refs
     1par)  

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

    p[0].c

    >>>[str(3079323384 33B 10647par 'popuserid'), str(2814724096 45B 1par 'fuzimiao2000@sohu.com'), str(3079036128 31B 10624par 'mailnum'), int(165090672 12B 29par '75'),

    #查看谁引用了这个对象

    p[0].p

    >>>[POP3ClientFactory(2803893100 552B 15refs 3par)]

  • 相关阅读:
    Windows 解压缩XX.zip.001 XX.z01分卷文件的方法
    Android Library 发布开源库 JCenter & JitPack 攻略
    常见场景下Fragment和Activity的生命周期对比
    Android Studio 插件 ADBWifi 无线调试真机
    Flutter upgrade更新版本引发的无法启动调试APP的错误 target:kernel_snapshot failed”
    Glide异常:Failed to find GeneratedAppGlideModule 解决实践
    Android 讯飞语音听写SDK快速接入(附空指针解决和修改对话框文字方法)
    Android 自定义View—清爽小巧灵活的多节点进度条
    Android EXCEL 解析 xls 和 xlsx,方法其实很简单
    解决repo从codeaurora.org同步Android代码失败问题
  • 原文地址:https://www.cnblogs.com/Arborday/p/9754891.html
Copyright © 2011-2022 走看看