在Python中计算内存碎片化

4

我有一个长时间运行的进程,它不断地分配和释放对象。虽然对象被释放了,但RSS内存使用量随着时间的推移而增加。

我如何计算发生了多少碎片化?一种可能性是计算RSS / 分配总和,并将其作为指标。即使这样,我如何计算分母(分配总和)。


1
你为什么认为这是内存碎片问题?尝试使用Python内存分析器。 (https://dev59.com/RHVD5IYBdhLWcg3wDG_l) - jfs
@J.F.Sebastian 我接下来就要做这件事。但是Python因为为长期运行的进程分配/释放小块内存而导致内存碎片化而闻名。 - Ali
@J.F.Sebastian,使用性能分析器,你如何确定是否发生了内存碎片化?你只需要将内存分配的总和与RSS进行比较吗? - Ali
内存分析器允许您查找内存泄漏(“RSS mem usage goes up”的替代解释)。 - jfs
1
你最终解决了这个问题吗?我也遇到了类似的情况。 - CadentOrange
1个回答

1

请查看垃圾回收器接口gc。

http://docs.python.org/2/library/gc.html

您可以使用gc.get_objects()检查正在跟踪的对象。

“通常情况下,原子类型的实例不会被跟踪,而非原子类型(容器、用户定义的对象等)的实例会被跟踪。”

还有gc.garbage,它可以找到无法释放但是不可访问的对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接