Нашел серию статей разработчиков Instagram о том, к каким методам им приходится прибегать для поддержания работы веб-версии, написанной на Python и Django.
В первой части был рассказ об отключении сборщика мусора в питоне через gc.set_threshold(0)
. gc.disable()
практически не работал, потому что сторонние библиотеки очень любят внутри принудительно включать сборщик мусора (который, к слову, практически не нужен, т.к. все равно есть счетчик ссылок, а сборщик нужен лишь для циклов после преодоления порога алокаций минус деалокаций). Сборщик мусора вызывал Copy-on-Write страниц памяти, разделяемых с главным процессом из за чего росло потребление памяти.
Во второй статье примерно через год после выхода первой эпопея продолжилась. Приложение, разросшееся фичами, перестало справляться с нагрузкой и снова возросло потребление памяти. В итоге было решено часть объектов переместить в старое поколение через gc.freeze()
и включить сборку мусора. Результат превзошел ожидания.
Немає коментарів:
Дописати коментар