2012-12-09 53 views
3

我有一个长期运行的进程,不断分配和释放对象。尽管对象正在被释放,但RSS存储器的使用量会随着时间的推移而增加。在Python中计算内存碎片

我该如何计算有多少碎片发生了?一种可能性是计算RSS/sum_of_allocations并将其作为指标。即使如此,我该如何计算分母(sum_of_allocations)。

+1

你为什么认为这是内存碎片问题?尝试[Python内存分析器](http://stackoverflow.com/questions/110259/python-memory-profiler) – jfs

+0

@ J.F.Sebastian我准备下一步做。但是Python已知为分配/释放小块内存的长期存在的进程片段化内存。 – Ali

+0

@ J.F.Sebastian因此,使用探查器,你如何判断碎片是否发生?你只是总结内存分配,并与RSS进行比较? – Ali

回答

1

查看垃圾收集器界面,gc。

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

可以检查对象是否被跟踪与gc.get_objects()

“作为一般规则,原子类型的实例是不被跟踪和容器非原子类型的实例( ,用户定义的对象...)都是。“

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