我一直在使用越来越多的内存在Django随着时间的推移它开始小多线程的脚本来运行。 离开它一整天吃约6GB内存,我开始交换。
继http://www.lshift.net/blog/2008/11/14/tracing-python-memory-leaks我认为这是最常见的类型(只有使用的内存800M):
(Pdb) objgraph.show_most_common_types(limit=20)
dict 43065
tuple 28274
function 7335
list 6157
NavigableString 3479
instance 2454
cell 1256
weakref 974
wrapper_descriptor 836
builtin_function_or_method 766
type 742
getset_descriptor 562
module 423
method_descriptor 373
classobj 256
instancemethod 255
member_descriptor 218
property 185
Comment 183
__proxy__ 155
不显示任何怪异。 我现在应该做些什么来帮助调试内存问题?
更新:尝试一些东西的人推荐。 我跑的程序过夜,当我工作了,内存50%* 8G == 4G使用。
(Pdb) from pympler import muppy
(Pdb) muppy.print_summary()
types | # objects | total size
========================================== | =========== | ============
unicode | 210997 | 97.64 MB
list | 1547 | 88.29 MB
dict | 41630 | 13.21 MB
set | 50 | 8.02 MB
str | 109360 | 7.11 MB
tuple | 27898 | 2.29 MB
code | 6907 | 1.16 MB
type | 760 | 653.12 KB
weakref | 1014 | 87.14 KB
int | 3552 | 83.25 KB
function (__wrapper__) | 702 | 82.27 KB
wrapper_descriptor | 998 | 77.97 KB
cell | 1357 | 74.21 KB
<class 'pympler.asizeof.asizeof._Claskey | 1113 | 69.56 KB
function (__init__) | 574 | 67.27 KB
这并不总和为4G,也确实给我的结构去解决任何大数据。 Unicode的是从“做”节点集(),和列表的样子只是随机weakref
秒。
我没有用孔雀鱼,因为它需要一个C扩展,我没有根,因此将是建立一个痛。
在objectI没有使用有一个__del__
方法,并通过图书馆寻找,它看起来并不像Django的,也不是蟒蛇,MySQLdb的做无论是。 任何其他的想法?