2012-12-09 52 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,它可以找到無法釋放但無法訪問的對象。