我在这里看到了如何用Django设置heapy:http://www.toofishes.net/blog/using-guppy-debug-django-memory-leaks/
我已经下令hp.setref()过了一段时间我也得到了hp.堆():
>>> hp.heap()
Partition of a set of 12075 objects. Total size = 1515496 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 4048 34 339656 22 339656 22 str
1 3112 26 269368 18 609024 40 tuple
2 171 1 169992 11 779016 51 dict (no owner)
3 1207 10 144440 10 923456 61 list
4 49 0 102040 7 1025496 68 dict of module
5 591 5 66984 4 1092480 72 unicode
6 498 4 59760 4 1152240 76 function
7 433 4 51960 3 1204200 79 types.CodeType
8 57 0 50480 3 1254680 83 type
9 36 0 31584 2 1286264 85 dict of class
但现在呢?我应该从这个输出中理解什么?我该如何开始跟踪那些“str”和“tuple”对象的归属?在
使用get_rp,我得到以下输出:
^{pr2}$现在正确的假设是Django正在泄漏内存吗?但是那些没有主人的迪克特是什么?在
我对heapy没有任何经验,但根据我的经验,Django(和大多数其他Python程序)不会泄漏内存,但也不会像某些人希望的那样清理内存。在
另外,Django的设置会导致它出于诊断原因而消耗内存。例如,设置DEBUG=True会导致它保留所有SQL查询,因此进程运行的时间越长,它使用的内存就越多。在
更新:您的问题不在Python代码中。看看heapy给你的总结:内存的总大小有1.5Mb!当Python程序真正泄漏时,最常见的原因是C扩展泄漏。您有没有在Django进程下运行的C扩展?在
相关问题 更多 >
编程相关推荐