Сколько времени использует сборщик мусора? - PullRequest
8 голосов
/ 24 мая 2011

У моей программы на Python странное поведение производительности: чем дольше она работает, тем медленнее она работает. С самого начала он запускает десятки рабочих единиц в минуту. Через час это занимает десятки минут на единицу работы. Я подозреваю, что это вызвано перегруженным сборщиком мусора.

Загвоздка в том, что мой скрипт слишком требователен к памяти, чтобы cProfile мог работать на больших прогонах. (см .: cProfile, занимающий много памяти )

Мы написали наш собственный плагин для повышения производительности, и мы можем наблюдать большинство частей нашей системы, и ни одна из них не является проблемой Единственный камень, который до сих пор не найден, это GC.

Есть ли другой способ (помимо профиля или cProfile), чтобы узнать, сколько времени уходит в GC?

1 Ответ

7 голосов
/ 24 мая 2011

В Python большая часть мусора собирается с помощью подсчета ссылок. Можно было бы ожидать, что это будет быстро и безболезненно, и вряд ли это то, что вы ищете. Я предполагаю, что вы спрашиваете о коллекторе, на который ссылается модуль gc, который используется только для циклических ссылок.

Есть несколько вещей, которые могут быть полезны: http://docs.python.org/library/gc.html

Хотя не существует прямого метода для времени сборщика мусора, вы можете включить и выключить его, включить отладку, посмотреть количество сборок и т. Д. Все это может быть полезно в ваш квест.

Например, в моей системе gc выводит истекшее время, если вы включите флаги отладки:

In [1]: import gc

In [2]: gc.set_debug(gc.DEBUG_STATS)

In [3]: gc.collect()
gc: collecting generation 2...
gc: objects in each generation: 159 2655 7538
gc: done, 10 unreachable, 0 uncollectable, 0.0020s elapsed.

Помимо всего этого, первое, на что я бы обратил внимание, это эволюция использования памяти вашей программой во время ее работы. Одна из возможностей заключается в том, что он просто достигает предела доступной физической памяти и замедляется из-за чрезмерных сбоев страниц, а не из-за каких-либо действий со сборщиком мусора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...