|
|
1
88
看看这篇文章: Tracing python memory leaks
此外,请注意
garbage collection module
|
|
|
2
71
我尝试了前面提到的大多数选项,但发现这个小巧直观的软件包是最好的: pympler 跟踪未被垃圾回收的对象非常简单,请查看以下小示例:
通过安装软件包
输出显示了所有已添加的对象,以及它们消耗的内存。 样本输出:
此软件包提供了许多其他功能。检查 pympler's documentation Identifying memory leaks . |
|
|
3
22
|
|
|
4
12
Tracemalloc module a third-party library (不过还没有测试过)。
我建议您结合使用tracemalloc pyrasite top 10 snippet 在一个 pyrasite-shell 将为您提供足够的信息和提示,以便在10分钟内修复泄漏。然而,如果你仍然无法找到泄漏原因,pyrasite shell结合本线程中提到的其他工具可能会给你更多的提示。您还应该查看pyrasite提供的所有额外帮助程序(如内存查看器)。 |
|
|
5
9
您应该特别查看您的全局或静态数据(长期数据)。
垃圾收集器只能收集不再被引用的数据。但是,静态数据可以连接应该释放的数据元素。 另一个问题可能是内存周期,但至少在理论上,垃圾回收器应该找到并消除周期——至少只要它们不依赖于一些长期存在的数据。 哪些类型的长寿命数据特别麻烦?好好看看任何列表和字典——它们可以无限增长。在字典中,你甚至可能没有看到问题的出现,因为当你访问字典时,字典中的关键字数量可能对你来说不是很明显。.. |
|
|
6
7
|
|
|
7
4
就最佳实践而言,请注意递归函数。在我的例子中,我遇到了递归问题(不需要递归)。我正在做的一个简化示例:
以这种递归方式操作不会触发垃圾回收并清除函数的剩余部分,因此每次内存使用都在不断增长。
|
|
|
8
3
不确定python中内存泄漏的“最佳实践”,但python应该通过垃圾收集器清除自己的内存。所以主要我会从检查一些短的循环列表开始,因为它们不会被垃圾回收器回收。 |
|
|
9
3
|