使用heapy跟踪Django应用程序中的内存泄漏

2024-10-01 11:33:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这里看到了如何用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正在泄漏内存吗?但是那些没有主人的迪克特是什么?在


Tags: ofdjangohttpnetwwwblogdictclass
1条回答
网友
1楼 · 发布于 2024-10-01 11:33:13

我对heapy没有任何经验,但根据我的经验,Django(和大多数其他Python程序)不会泄漏内存,但也不会像某些人希望的那样清理内存。在

另外,Django的设置会导致它出于诊断原因而消耗内存。例如,设置DEBUG=True会导致它保留所有SQL查询,因此进程运行的时间越长,它使用的内存就越多。在

更新:您的问题不在Python代码中。看看heapy给你的总结:内存的总大小有1.5Mb!当Python程序真正泄漏时,最常见的原因是C扩展泄漏。您有没有在Django进程下运行的C扩展?在

相关问题 更多 >