我有一个长期运行的过程,不断分配和释放对象。尽管正在释放对象,但 RSS 内存使用量会随着时间的推移而上升。
如何计算发生了多少碎片?一种可能性是计算 RSS / sum_of_allocations 并将其作为指标。即使那样,我该怎么办计算分母(sum_of_allocations)。
我有一个长期运行的过程,不断分配和释放对象。尽管正在释放对象,但 RSS 内存使用量会随着时间的推移而上升。
如何计算发生了多少碎片?一种可能性是计算 RSS / sum_of_allocations 并将其作为指标。即使那样,我该怎么办计算分母(sum_of_allocations)。
查看垃圾收集器界面,gc。
http://docs.python.org/2/library/gc.html
您可以使用 gc.get_objects() 检查正在跟踪的对象
“作为一般规则,不跟踪原子类型的实例,而跟踪非原子类型(容器、用户定义的对象......)的实例。”
还有 gc.garbage,它会查找无法释放但无法访问的对象。