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环境变量使用内存情况(包括内存池和非内存池的)。
详细用法还有很多,可参考:
3、psutil
获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。
详细可参考:
4、pympler
5、pdb+objgaph
http://tech.labs.oliverwyman.com/blog/2008/11/14/tracing-python-memory-leaks/