27
Памяти Питона. Трактат ъ. Антон Патрушев Moscow Python Meetup, 19/07/2014

Управление памятью в CPython

Embed Size (px)

DESCRIPTION

Доклад о GC в риалтайм приложениях.

Citation preview

Page 1: Управление памятью в CPython

Памяти.Питона

Трактатъ. АнтонПатрушевMoscow Python Meetup, 19/07/2014

Page 2: Управление памятью в CPython

« ? ?»А тыкто такой Откуда взялся

« …»С того берега моря © Арменфильм

Noda Interaction Platforms (former Naumen Phone) CTO, Co-Founder, Software Architect

PyCon Russia основатель ипрограммныйдиректор

Page 3: Управление памятью в CPython

« ? ?»А тыкто такой Откуда взялся

15 лет C++ / 10 лет Python -Сервер сайд / Проектирование разработка

Page 4: Управление памятью в CPython
Page 5: Управление памятью в CPython

Highload, Real-time. Naumen way.

ПОдля контактных центров / Тысячи операторов одновременныхвызовов

Микросервисная архитектура C++/Python/Java ( и даже node.js, , вроде F-u-u-u-u!!!) Home-made XML-RPC

Twisted 1000 rps на один процесс Python – Время ответа не более парымиллисекунд

Page 6: Управление памятью в CPython

Кто знает как устроено управление

памятьюв CPython?

Page 7: Управление памятью в CPython

Управление памятьюв CPython

Reference counting Garbage collector Anything else?

Page 8: Управление памятью в CPython

Подсчёт ссылок

Считается механизмом сборки мусора Python Documentation: http://goo.gl/j0mL84 obj->refcnt++ if (--obj->refcnt == 0) delete obj

На самом деле конечноже не delete Каскадное уменьшение счётчиков

ссылок при удалении объекта

Page 9: Управление памятью в CPython

Подсчёт ссылок

Page 10: Управление памятью в CPython

Подсчёт ссылок

!!!Бинго

Page 11: Управление памятью в CPython

__del__

Никогда не используйте __del__ Я вас предупредил __del__ не деструктор из C++ ( - из за

)автоматической сборки мусора [del x] не приводит к вызову [x.__del__] Делать RAII __с использование del__ ОПАСНО

Resource Acquisition Is Initialization Есть ситуации в которых ваш __del__ не будет

вызван вообще никогда

Page 12: Управление памятью в CPython

__del__

Page 13: Управление памятью в CPython

Подсчёт ссылок

Циклы GC

Page 14: Управление памятью в CPython

GC. Основы

Stop The World Базируется на поколениях Запуск по событиям

Gen(0): (allocates-deallocates) Gen(x): num(Gen(x-1)) for x in (1,2)

Управляется при помощиgc.set_threshold

Возвращает память ОС (!!!)

Page 15: Управление памятью в CPython

GC и Realtime

?Когда запустится сборка .Не известно ? .Сколько она будет длиться Не известно =Наш выбор > gc.disable

Page 16: Управление памятью в CPython

Есть лижизнь без gc?

Финализировать объекты явно Explicit is better than implicit

Следить за памятью при тестировании ипосле

gc.get_count()[0]=>Gen(0) работать не перестаёт Ловить циклы

gc.set_debug(gc.DEBUG_SAVEALL) gc.collect gc.garbage

Page 17: Управление памятью в CPython

Есть лижизнь без gc?

(!!!)Сделайте бэкдор в своё приложение twisted.manhole rfoo.utils.rconsole pydevd ( ) теоретически возможно подключиться GDB

Включите в установку objgraph

Page 18: Управление памятью в CPython

gc.garbage + objgraph

Page 19: Управление памятью в CPython

gc.garbage + objgraph

Page 20: Управление памятью в CPython

?Что делать с циклами

Явная финализация с чисткой ссылок weakref Можно хранить id(obj) вместо obj

Не делайте так – Хотя иногда можно

Page 21: Управление памятью в CPython

, Уважаемые знатоки пишет…вам

Page 22: Управление памятью в CPython

Неожиданныйцикл: __closure__

Page 23: Управление памятью в CPython

Опасный трюк с id(obj)

Page 24: Управление памятью в CPython

… или безопасныйweakref

Page 25: Управление памятью в CPython

Какжить не отключая GC?

Полная сборка мусора после warm-up « 2»Переместит вечные объекты в поколение

Настройка threshold’s Зависит от приложения Gen(0) => - кол во объектов при предельнойнагрузке

Gen(1) => X Gen(2) => 0 ( )отключаем

Это в любом случае фриз

Page 26: Управление памятью в CPython

Ссылки

Python Doc’s https://docs.python.org/2/library/gc.html https://docs.python.org/2/c-api/intro.html

Visualizing Garbage Collection in Ruby and Python http://patshaughnessy.net/2013/10/24/visualizing-

garbage-collection-in-ruby-and-python http://www.youtube.com/watch?v=qzEekAnAS_g

. ?Костя Лопухин На что уходит память http://www.youtube.com/watch?v=OYgRozleVG4

Page 27: Управление памятью в CPython

« ? ?Какой заяц Какой орёл ?»Какая блоха

?Вопросы[email protected]

?Повторить