python 内存分析

 

 

1、改源码重新编译打印相关信息

obmalloc.c 文件中打印 maxarenas,值为当前环境分配 arena 个数;分配 arena 时并没有马上分配对应的pools,故对于每一个 arena,nfreepools 和 ntotalpools 为分配pool的可用pool数和总pool数。

int arena_len = 0;
int _nfreepools =0 ;
int _ntotalpools = 0;
int i;
for(i =0; i<maxarenas;++i){
    if(arenas[i].address == 0)
        continue;
    arena_len++;     
    _nfreepools += arenas[i].nfreepools ;
    _ntotalpools += arenas[i].ntotalpools ; 
}

主要是这些信息:maxarenas 表示已分配arena个数,_ntotalpools 表示已分配pool个数(内存池容量为 _ntotalpools *4KB,每个pool为4KB)。

 


 

2、guppy

需要安装,
hp = guppy.hpy()

hp.heap()

可查看当前python环境变量使用内存情况(包括内存池和非内存池的)。

详细用法还有很多,可参考:

 http://smira.ru/wp-content/uploads/2011/08/heapy.html


 

3、psutil

 获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。

详细可参考:

http://www.cnblogs.com/liu-yao/p/5678157.html

 


 

4、pympler

https://pythonhosted.org/Pympler/

 


 

 

5、pdb+objgaph

http://tech.labs.oliverwyman.com/blog/2008/11/14/tracing-python-memory-leaks/

 

posted @ 2017-05-10 19:59  heaventouch  阅读(1507)  评论(0编辑  收藏  举报