После 2 дней отладки я прибег к своему временному блюду: сборщик мусора Python.
Мое приложение содержит много объектов в памяти.И это хорошо работает.
ГК выполняет обычные раунды (я не играл с пороговыми значениями по умолчанию (700, 10, 10)).
Время от времени, в середине важной транзакции,Развертывание 2-го поколения включается и просматривает мои объекты ~ 1,5M поколения 2.
Это занимает 2 секунды! Номинальная транзакция занимает менее 0,1 секунды.
Мой вопрос: что мне делать?делать?
Я могу отключить развертки поколения 2 (установив очень высокий порог - это правильный путь?), и ГХ послушен.
Когда мне их включать?
Мы внедрили вебс использованием Django, и каждый пользовательский запрос занимает около 0,1 секунды.
Оптимально, я буду запускать эти циклы GC gen 2 между запросами пользовательского API.Но как мне это сделать?
Мой вид заканчивается на return HttpResponse()
, ПОСЛЕ , который я хотел бы запустить для сканирования GC 2-го поколения.
Как мне это сделать?Имеет ли этот подход смысл?
Можно ли пометить объект, который НИКОГДА не нужно собирать мусором, чтобы ГХ не проверял их каждый цикл 2-го поколения?
Как настроить ГХ для выполнения полных зачистоккогда сервер Django относительно простаивает?
Python 2.6.6 на нескольких платформах (Windows / Linux).