理解select模块--等待IO完成
python终端模拟工具pexpect

meliae内存分析-基本用法

妙音 posted @ 2014年2月24日 12:58 in python with tags 内存;meliae , 5623 阅读
python的内存分析工具meliae,挺好用的.
示例

1.记录程序的内存使用信息

import time

# 此处是可能发生内存泄露的地方
def main():
    pass

if __name__ == '__main__':
    # 通过循环执行,将泄露的内存积累放大
    while True:
        main()
        time.sleep(10)
        # 记录每次执行完后占用的内存
        from meliae import scanner
        scanner.dump_all_objects('mem_dump%s' % time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

2.查看占用的内存大小

from meliae import loader
om = loader.load('mem_dump2014-02-2022-34-43')
om.summarize()
具体分析引用关系太麻烦,以上是个人喜欢的方法:
用循环将泄露的内存累积放大. 然后记录每次执行完后占用的内存.
查看占用内存大小. 再比较每次的内存大小,即可知道是否发生泄露.
至于内存泄露的地方,则用排除法,重复上述过程,定位泄露地点.
 
基本用法
  • 获取进程的内存信息
import time
from meliae import scanner
scanner.dump_all_objects('mem_dump%s' % time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
  • 查看占用内存
from meliae import loader
#加载dump文件
om = loader.load('mem_dump2014-02-2022-34-43')
#分析内存占用情况
om.summarize()
  • 输出样例
Total 40335 objects, 125 types, Total size = 6.5MiB (6768944 bytes)
 Index   Count   %      Size   % Cum     Max Kind
     0    1245   3   1792824  26  26   98584 dict
     1   18560  46   1568824  23  49   12479 str
     2     226   0    730272  10  60   12624 module
     3     559   1    505336   7  67     904 type
     4    3573   8    457344   6  74     128 code
     5    3759   9    451080   6  81     120 function
     6    2506   6    189840   2  84     576 tuple
     7    1383   3    163768   2  86    4280 list
     8    1303   3    104240   1  88      80 wrapper_descriptor
     9     895   2     78760   1  89      88 weakref
    10     942   2     67824   1  90      72 builtin_function_or_method
    11     198   0     66928   0  91    8424 set
    12     388   0     65136   0  92    1552 unicode
    13     807   2     58104   0  93      72 method_descriptor
    14      50   0     56000   0  93    1120 OracleDB
    15    1680   4     40320   0  94      24 int
    16      36   0     36768   0  95    1192 StgDict
    17     446   1     32112   0  95      72 getset_descriptor
    18      87   0     29928   0  95     344 WeakSet
    19     395   0     28440   0  96      72 member_descriptor
 
字段说明
Index : 行索引号
Count : 该类型的对象总数
%(Count) : 该类型的对象总数 占 所有类型的对象总数 的百分比
Size : 该类型的对象总字节数
%(Size) : 该类型的对象总字节数 占 所有类型的对象总字节数 的百分比
Cum : 累积行索引后的%(Size)
Max : 该类型的对象中,最大者的字节数
Kind : 类型
 
  • 对象及引用关系
个人不喜欢用这个
#得到所有的OracleDB对象
p = om.get_all('OracleDB')
#查看第一个对象
p[0]
#可以查看该对象的所有引用
p[0].c
#查看谁引用了这个对象
p[0].p
 
Avatar_small
Imamia Quran Academy 说:
2023年8月04日 07:06

Hi everyone, I really love your story. You have very useful information; I am from Imamia Quran Academy. Online ahle tashi Madrasa has enabled students to grasp and learn Quran knowledge via one click. It includes the basic beliefs of the Shias, the history of Islam, Nahj al-Balagha (which contains the sermons of Hazrat Ali a.s), and the prayers of other imams such as the book of supplications of Hazrat Imam Sajjad a.s, (Sahifa Sajjadiya).


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter