我意识到一个 python 脚本中存在内存泄漏。最开始占用25MB左右,15天后超过500MB。
我遵循了许多不同的方法,但无法像 python 新手那样深入到问题的根源...
最后,我得到了以下内容
objgraph.show_most_common_types(limit=20)
tuple 37674
function 9156
dict 3935
list 1646
wrapper_descriptor 1468
weakref 888
builtin_function_or_method 874
classobj 684
method_descriptor 551
type 533
instance 483
Kind 470
getset_descriptor 404
ImmNodeSet 362
module 342
IdentitySetMulti 333
PartRow 331
member_descriptor 264
cell 185
FontEntry 170
我设置了一个断点,每次迭代后都是这样......
objgraph.show_growth()
tuple 37674 +10
最好的方法是什么?
(Pdb) c
(Pdb) objgraph.show_growth()
tuple 37684 +10
我想打印出所有的元组,然后交叉检查——每次添加这 10 个元组会给我一些线索吗?请让我知道该怎么做..
或者是否有任何其他方法可以找出此内存泄漏。我正在使用 python 2.4.3,并且由于许多其他产品依赖性 - 不幸的是我不能/不应该升级。
最佳答案
我没看错吗,同一个脚本不间断地运行了 15 天?
对于此类长时间运行的进程,定期重启是一种很好的做法,而且比消除所有内存泄漏要容易得多。
更新:查看this answer ,它似乎完全符合您的需要——打印所有未被垃圾回收的新添加对象。
关于python - 从调试器打印 python 中所有可用的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5151898/