Форум сайта python.su
Подскажите пожалуйста, как найти место где течет память?
Офлайн
Вы не хотите как-то конкретизировать вопрос? Почему вы вообще решили что она течет?
В том виде как у вас задан вопрос. Отключать участки кода и выполнять тест что она течет. :)
Поскольку обычно никто не жалуется что она течет, надо начать с компилированных модулей.
Отредактировано doza_and (Июнь 27, 2016 08:58:42)
Офлайн
Есть программа, которая парсит данные с сети и отображает их в gui. После каждого запуска обновления занимаемая память увеличивается на несколько мб, таким образом программа через некоторое время достигает 1 гб и т д
Это на столько жестко, что если открыть системный монитор и начать обновлять программу, то она с 40 мб на глазах вырастает до 200 (после n попыток обновить данные).
Офлайн
Ну так это не утечка памяти! Это у вас в программе в каком то месте не сделан выход.
Или очистка данных перед обновлением.
Просмотрите внимательно код! Может вы файл(коннект к бд) где-то не закрываете?
Офлайн
Вообще - не обязательно в этом случае, утечки быть могут. Причины: циклические ссылки и неправильное использование __del__.
Загляните в документацию около gc.garbage
Офлайн
alex925Скорее всего, это какой-то список заполняется многократно, но без предварительной очистки.
как найти место где течет память?
Офлайн
py.user.next
да в том, то и дело, что не нахожу такого места
Офлайн
Профилировщиком гоняли?
Офлайн
Самому это делать не приходилось, но модуль gc умеет отображать свою статистику. Сделайте сброс его данных в логи в нескольких местах программы и погоняйте.
Офлайн
alex925
memprof, objgraph
Офлайн