gpt4 book ai didi

Python:内存泄漏调试

转载 作者:IT老高 更新时间:2023-10-28 22:24:01 32 4
gpt4 key购买 nike

我有一个在 django 中运行的小型多线程脚本,随着时间的推移,它开始使用越来越多的内存。离开它一整天会消耗大约 6GB 的 RAM,然后我开始交换。

关注 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 的 RAM。

(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 来自“完成”节点的 set(),列表看起来只是随机的 weakrefs。

我没有使用 guppy,因为它需要 C 扩展,而且我没有 root,所以构建起来会很痛苦。

我使用的所有对象都没有 __del__ 方法,并且查看库,它看起来不像 django 和 python-mysqldb 也一样。还有其他想法吗?

最佳答案

http://opensourcehacker.com/2008/03/07/debugging-django-memory-leak-with-trackrefs-and-guppy/ .简短的回答:如果您正在运行 django 但不是基于网络请求的格式,则需要手动运行 db.reset_queries() (当然还有 DEBUG=False,正如其他人提到的那样)。 Django 在 Web 请求后自动执行 reset_queries(),但以您的格式,这永远不会发生。

关于Python:内存泄漏调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1339293/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com