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

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

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

一、安装:

安装python内存分析工具sudo pip install cythonsudo 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)]

聚合全网技术文章,根据你的阅读喜好进行个性推荐

下载 APP

©开源中国(OSChina.NET)
工信部

开源软件推进联盟

指定官方社区

深圳市奥思网络科技有限公司版权所有

粤ICP备12009483号-3

转载于:https://www.cnblogs.com/Arborday/p/9754891.html

[转] python运行时内存分析工具meliae相关推荐

  1. python 内存分析工具_[转] python运行时内存分析工具meliae

    meliae是一个python进程内存占用监控.分析工具,它的安装需要依赖pyrex包. 一.安装: 安装python内存分析工具 sudo pip install cython sudo pip i ...

  2. 06JVM运行时内存分析

    程序计数器 概述 程序计数器(Program Counter Register)也称之为PC寄存器,是一块较小的内存空间,用来存储指向下一条指令的地址,也可以看作是当前线程执行的字节码的行号指示器. ...

  3. Volatility内存分析工具-某即时通讯软件Windows端数据库密钥的分析

    转载自公众号:取证者联盟 目录 1. 前言 2. 准备工作 3. 内存镜像解析 4. 踩过的坑和感悟 5. 技术要点总结 前言 某年月日,我司在项目中遇到了一个不太常见的需求:根据内存镜像解析电脑中的 ...

  4. Windows系统内存分析工具的介绍

    Windows系统内存分析工具的介绍(进程管理器,资源管理器,性能监视器, VMMap, RamMap,PoolMon) 微软官方提供多种工具来分析Windows 的内存使用情况,除了系统自带的任务管 ...

  5. 内存分析工具MAT的使用

    原文链接:http://www.jianshu.com/p/d8e247b1e7b2 MAT简介 MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速. ...

  6. envi 文件 生成mat_JVM 内存分析工具 MAT 的深度讲解与实践——入门篇

    1. MAT 工具简介 MAT(全名:Memory Analyzer Tool),是一款快速便捷且功能强大丰富的 JVM 堆内存离线分析工具.其通过展现 JVM 异常时所记录的运行时堆转储快照(Hea ...

  7. Android内存分析工具:Memory Profiler

    一.前言  我们知道,Android系统检测到app有不再使用对象时,就会进行内存回收相关的工作. 尽管Android检测无用对象.回收内存的方法在不断改进,  但在目前所有的Android版本中,进 ...

  8. oracle 内存分析工具,IDE 中的分析工具

    IDE 中的分析工具 Oracle Solaris Studio IDE 提供的交互式图形分析工具可用于检查在 IDE 内部运行的项目的性能.分析工具使用 Oracle Solaris Studio ...

  9. java内存分析工具_java内存查看与分析

    业界有很多强大的java profile的工具,比如Jporfiler,yourkit,这些收费的东西我就不想说了,想说的是,其实java自己就提供了很多内存监控的小工具,下面列举的工具只是一小部分, ...

最新文章

  1. .net反射详解 原文://http://blog.csdn.net/wenyan07/article/details/27882363
  2. Java提高——多线程(二)join、sleep、yield
  3. java语言适合编写什么_01--Java语言概述与开发环境 最适合入门的Java教程
  4. 解决高并发的问题python_python ---解决高并发超卖问题
  5. 使用Netbeans开发App Engine Java
  6. html5中如何实现跑马灯效果,h5_实现跑马灯效果
  7. 解决:能提交和更新,但SVN查看log时提示找不到路径'svn/XXXX'
  8. 详解没有dSYM文件 如何解析iOS崩溃日志
  9. 数据分析中数据概览神器pandas_profiling介绍
  10. 【GIT】git 提交代码正确步骤
  11. python开发简单计算器下载_如何运用Python编写简易计算器?
  12. Eclipse多国语言包的安装
  13. 计算广告系统算法与架构综述
  14. 一种高效查找树-radix的实现
  15. 雪崩效应 (密码学术语)
  16. ps cs6调油画效果教程
  17. CMMI3-CMMI5评估认证需要遵循七大原则
  18. canvas画圆又毛边
  19. 浅谈虚拟机的垃圾回收
  20. mysql-5.7.11-winx64_mysql 5.7.11 winx64安装配置教程

热门文章

  1. 奇虎360将于18日在美摘牌 进程早于外界预期
  2. C# Lambda表达式
  3. 通过JDBC进行简单的增删改查(二)
  4. 针对MySQL数据库主从延迟的问题
  5. 浅析Google技术底蕴
  6. fwrite ,fprintf的作用与区别
  7. 单片机涡轮流量传感器_暖通慧教你一文读懂流量传感器
  8. Ubuntu10.04中IBus随系统启动的方法
  9. 谨慎的Waymo CEO:未来几十年,自动驾驶无法做到无处不在
  10. Spark Scala语言学习系列之完成HelloWorld程序(三种方式)