Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 30, 2016 00:18:21

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Утечки памяти

Пробовал с помощью pympler смотреть сколько занимают в памяти объекты. Ни один из типов данных не увеличивается после обновления. Судя по этим цифрам ошибка не в обнулении словаря или списка.

from pympler import muppy, summary
 
all_objects = muppy.get_objects()
sum1 = summary.summarize(all_objects)
summary.print_(sum1)

В программе используется aiohttp, может где-то там проблема?

Отредактировано alex925 (Июнь 30, 2016 15:09:52)

Офлайн

#2 Авг. 10, 2016 15:16:49

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Утечки памяти

Недавно разбирался с “утечками”, выяснил несколько нюансов.

Если вы сделаете пачку объектов и займете кучу памяти, то после удаления этой пачки объектов, память может и не освободится, либо освободится не вся, тут 2 причины:
1) Питон часть памяти не освобождает для оптимизации для будущих объектов.
2) Память выделяется чанками, если после удаления объектов в чанке останется хоть живой объект, то этот чанк не удаляется, итого объект в 256байт может не дать удалить блок в 256кб (дифрагментация).

Итого, если ваше приложение одновременно загрузило 5 файлов по 200Мб, то это может занять 1-2 Гб, и после завершения загрузки, эта память может быть по прежнему занята по причинам выше.
И это без всякой утечки.

Можете сделать такой тест, сделайте равномерную загрузку одного и того же файла, напр. 1 файл на 10 мб каждые 10 сек, итого если память будет заниматься линейно - то можно искать утечку, а если она логарифмический, т.е. быстро достигла 300мб и далее растет медленно или не растет, тогда утечек (особо) нет.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version