python - 从调试器打印 python 中所有可用的元组

标签 python memory-leaks

我意识到一个 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/

相关文章:

python - Django 中的 OneToOne、ManyToMany 和 ForeignKey 字段有什么区别?

python - 从数据生成器返回 3 张图像

c - `setjmp` 和 `longjmp` 的安全使用

c - 如果有堆栈溢出,linux 会告诉我吗?

python - Django 扩展管理 "index" View

python - Python 素数查找器的问题

python - 网络在形状 N 的网格上训练良好,但在评估任何变化时失败

c++ - 是否有可以链接到现有应用程序的 handle 检漏仪?

iPhone:我的泄漏应用程序会损害其他应用程序吗?

javascript - 避免内存泄漏 winjs EventListeners