Вычисление фрагментации памяти в Python

У меня есть длительный процесс, который постоянно выделяет и освобождает объекты. Хотя объекты освобождаются, использование RSS-памяти со временем увеличивается.

Как я могу рассчитать, насколько сильно происходит фрагментация? Одна из возможностей состоит в том, чтобы рассчитать RSS/sum_of_allocations и использовать это в качестве индикатора. даже тогда, как мне вычислить знаменатель (sum_of_allocations).


person Ali    schedule 09.12.2012    source источник
comment
почему вы думаете, что это проблема фрагментации памяти? Попробуйте профилировщик памяти Python.   -  person jfs    schedule 09.12.2012
comment
@ J.F.Sebastian Я собирался сделать это дальше. Но известно, что Python фрагментирует память для долгоживущих процессов, которые выделяют/освобождают небольшие куски памяти.   -  person Ali    schedule 10.12.2012
comment
@ J.F.Sebastian Итак, используя профилировщик, как вы понимаете, происходит фрагментация или нет? Вы просто суммируете распределение памяти и сравниваете это с RSS?   -  person Ali    schedule 10.12.2012
comment
Профилировщик памяти позволяет найти утечку памяти (появляется альтернативное объяснение использования RSS-памяти).   -  person jfs    schedule 10.12.2012
comment
Удалось ли вам решить это в конце концов? Я в похожей лодке.   -  person CadentOrange    schedule 18.10.2013


Ответы (1)


Ознакомьтесь с интерфейсом сборщика мусора, gc.

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

Вы можете проверить отслеживаемые объекты с помощью gc.get_objects()

«Как правило, экземпляры атомарных типов не отслеживаются, а экземпляры неатомарных типов (контейнеры, пользовательские объекты...) отслеживаются».

Существует также gc.garbage, который находит объекты, которые нельзя освободить, но которые недоступны.

person matt    schedule 09.12.2012