1.1 像Java程序一样,虽然Python本身也有垃圾回收的功能,但是同样也会产生内存泄漏的问题
1.2 在Python程序里,内存泄漏是由于一个长期持有的对象不断的往一个dict或者list对象里添加新的对象, 而又没有即时释放,就会导致这些对象占用的内存越来越多,从而造成内存泄漏。另外,对象的交叉引用也会造成内存无法释放的问题。
2 那么如果在Python里发现了内存泄漏的问题,如何去查找呢?本文讲述了如何使用objgraph这个工具来进行内存泄漏的查找
3 先下载objgraph这个工具:
3.1 objgraph
http://mg.pov.lt/objgraph/
3.2 https://pypi.python.org/pypi/objgraph
3.3 pythonsetup.py install 进行安装
4 安装graphviz
4.1 这是一个将图结构转化成png图片表示的工具,有了它,就可以通过对象的引用关系,为最终找到内存泄漏的对方提供最好的指导
4.2 windows版下载地址:
http://www.graphviz.org/Download_windows.php
4.3 ubuntu下安装:
sudo apt-get install graphviz
5 这个工具还可以利用graphviz这个工具来生成可视化的对象引用关系图,但是根据个人的使用经验,在对象比较多的时候,生成的图往往会比较大
6 如何查找产生泄漏的对象:
6.1 objgraph.show_growth()
这个函数可以说是这个工具中最有用的函数了
作用是输出增长的对象。
6.2 先从一个例子看看怎样用:
import os
import gc
import objgraph
gc.collect()
print'====================================='
objgraph.show_growth()
a = []
print'====================================='
objgraph.show_growth()
a.append([1,2,3])
print'====================================='
objgraph.show_growth()
b = ['a','b','c']
del b
print'=================&