Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Утечки памяти в приложении - FasMM, EurekaLog  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
Добрый день!

Продолжаю эксперименты с ВЕБ-Сокетами. Озадачился такой проблемой. Программа (WIN32) после старта занимает в диспетчере около 30 мб. Сетевой обмен через сокеты не очень интенсивный - примерно 2 кб в секунду. Спустя несколько часов, буквально за пару минут, объем памяти, занимаемой программой плавно увеличивается до 130 мб. Случано заметил, т.к. в этот момент смотрел в диспетчере.
Буквально, каждую секунду добавлялся лишний мегабайт. Потом несколько часов все работало нормально. Памямть не росла. Это Винда решила подкинуть памяти от щедрот своих для какой-то оптимизации обмена или это все же косяки где то, как думаете?

Вот что дает FastMM c ReportMemoryLeaksOnShutdown := True; (скрин). Выглядит, конечно, неприятно, но даже при перемножении в уме никак не тянет на лишних 100 мб

Поставил триал EurekaLog. И, к своему удивлению, ничего внятного от него пока получить не могу. Объем экзешника увеличился заментно, опции VCL и прочее выбраны, но ни в логе ничего нет, и при закрытии приложения никаких окон не появлятся. ReportMemoryLeaksOnShutdown := True; сначала закоментировал, конечно.

К сообщению приложен файл. Размер - 100Kb


Сообщение было отредактировано: 22 ноя 21, 12:45
22 ноя 21, 12:43    [22399028]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
rgreat
Member

Откуда:
Сообщений: 7024
Andi_WEB
Выглядит, конечно, неприятно, но даже при перемножении в уме никак не тянет на лишних 100 мб

Это оно просто не пишет память сожранную "внутри" этих классов. Перечисляет только "корневые" классы, так сказать.

Поставил триал EurekaLog. И, к своему удивлению, ничего внятного от него пока получить не могу. Объем экзешника увеличился заментно, опции VCL и прочее выбраны, но ни в логе ничего нет, и при закрытии приложения никаких окон не появлятся. ReportMemoryLeaksOnShutdown := True; сначала закоментировал, конечно.

Лучше MadExcept поставь. И проще пользоваться и без триала.

Ну оно за тебя утечки не поправит. И так видно, что у тебя компоненты не удаляются после использования.
Например 236 х TIdTCPClient.
А где они создаются думаю ты и так знаешь.

Сообщение было отредактировано: 22 ноя 21, 12:52
22 ноя 21, 12:51    [22399032]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
> Лучше MadExcept поставь. И проще пользоваться и без триала.

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

Согласен, спасибо. Буду копать.
22 ноя 21, 12:55    [22399033]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 985
Чтоб поймать утечки, одного FastMM достаточно.
Только учитывай, что если оно в режиме полной отладки, то куча намного больше за счет отладочной инфы. Ну и фаст может не отдавать системе однажды выделенную память, запасая ее у себя на будущее
22 ноя 21, 13:34    [22399068]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4936
Andi_WEB
Спустя несколько часов, буквально за пару минут, объем памяти, занимаемой программой плавно увеличивается до 130 мб. Случано заметил, т.к. в этот момент смотрел в диспетчере.
Буквально, каждую секунду добавлялся лишний мегабайт.
Если мегабайт в секунду, то было бы
(несколько часов) * 3600 мегабайт.
22 ноя 21, 13:51    [22399087]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

Fr0sT-Brutal
Ну и фаст может не отдавать системе однажды выделенную память, запасая ее у себя
на будущее

Ни один ММ не отдаёт системе память сразу. Фаст не исключение.

Posted via ActualForum NNTP Server 1.5

22 ноя 21, 13:56    [22399093]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
Но все же, почему EurekaLog вообобще ничего не показывает? Хотя бы из интереса хотелось взглянуть. Исполняемый файл увеличился, опция для работы с VCL приложением стоит - а ни влогах (сменил путь на боле простой, на диске D), ни окна при закрытии приложения не появляется.
22 ноя 21, 14:09    [22399102]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
> Если мегабайт в секунду, то было бы...

Имелось в виду, на мегабайт в секунду начинает увеличиваться объем потребляемой памяти по диспетчеру. До этого - около 30 мегабайт на протяжении пары часов. Потом резко увеличиваетсмя до 130 мб в течении короткого промежутка времени. Вот прям случайно это земетил, совпадение. А потом опять несколько часов работает на 130 мб...

Сообщение было отредактировано: 22 ноя 21, 14:14
22 ноя 21, 14:13    [22399108]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
Vizit0r
Member

Откуда: Одесса
Сообщений: 917
Andi_WEB
Но все же, почему EurekaLog вообобще ничего не показывает? Хотя бы из интереса хотелось взглянуть. Исполняемый файл увеличился, опция для работы с VCL приложением стоит - а ни влогах (сменил путь на боле простой, на диске D), ни окна при закрытии приложения не появляется.


Сейчас придет Алексей, и мягко поинтересуется, а что же там в опциях-то, в частности включена ли вообще галка про Leaks во вкладке Memory problems, и остальным из этого включаемого подраздела.

И да, там еще и вкладка Resource Leaks есть, что с ней-то?

Сообщение было отредактировано: 22 ноя 21, 14:32
22 ноя 21, 14:31    [22399119]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
GunSmoker
Member

Откуда:
Сообщений: 3294
По умолчанию в EurekaLog включена опция "Active only when running under debugger".

P.S. Но вообще я большого смысла не вижу использовать трейсеры исключений для локальной отладки. У них цель другая - сообщить о проблеме с полей. Отладочный же инструмент типа FastMM в FullDebugMode всегда покажет больше деталей, потому что может использовать более тяжёлую артиллерию.
22 ноя 21, 14:37    [22399125]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
> Отладочный же инструмент типа FastMM в FullDebugMode

Добрый день. Но у меня D2006. Там он, кажется, порезанный.
22 ноя 21, 15:25    [22399143]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

Там его вообще нет. С лёгкостью устанавливается полный.

Posted via ActualForum NNTP Server 1.5

22 ноя 21, 15:32    [22399146]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2657
Andi_WEB,

ну ты по названию классов "утекающих" объектов посмотри хоть.
Как ты их создаешь и где удаляешь.
Неужели трудно. TWebSocket, TidTCPClient. У тебя же не миллион мест в коде, где они встречаются.
22 ноя 21, 15:53    [22399157]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
Спасибо, уважаемые участники. Опции Leaks сам нашел, как-то но наитию. А вот Active only when running under debugger проглядел, каюсь. Но вот что интересно - окно со ссылкой при закрытии приложения стало появляться, но на долю секунды. Попасть в него тот еще квест. Может, там еще секреты есть?
22 ноя 21, 15:56    [22399160]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 15425
rgreat
Лучше MadExcept поставь.


+1
22 ноя 21, 16:05    [22399165]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
GunSmoker
Member

Откуда:
Сообщений: 3294
Такого точно быть не должно. Есть ненулевая вероятность, что возникает какое-то исключение при попытке показать отчёт. Под отладчиком если запустить - уведомление об исключении будут?

Ещё можно включить "Use Debug DCUs" и передать ключ командной строки --el_debug. При этом будет создан .csl файл в папке с .exe, куда будет записано всё, что происходит в приложении.

Я, правда, не уверен, что поможет первое или второе, поскольку утечки проверяются, когда в приложении уже всё убито - в том числе поддержка исключений. Скорее всего, тут надо по шагам смотреть.

Но если диалог появился, то файл отчёта должен быть уже создан. Он есть?
22 ноя 21, 16:06    [22399166]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
Andi_WEB
Member

Откуда:
Сообщений: 70
> Есть ненулевая вероятность, что возникает какое-то исключение при попытке показать отчёт.
Похоже, исключение возникает при закрытии моего приложения. Раньше его не было видно. Если умпеть нажать на окошко Еврики, то потом с ним можно работать. Разбираюсь дальше, что к чему, спасибо.
22 ноя 21, 16:13    [22399174]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 985
Dimitry Sibiryakov

Fr0sT-Brutal
Ну и фаст может не отдавать системе однажды выделенную память, запасая ее у себя
на будущее

Ни один ММ не отдаёт системе память сразу. Фаст не исключение.

Я не про сразу, а про вообще
22 ноя 21, 17:06    [22399218]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
swame2
Member

Откуда: Москва
Сообщений: 104
Andi_WEB,

Расходуемая память не обязательно является утечкой.
Если классы копятся в памяти но, но будут освобождены при выходе, то они не будут показаны как утечка.
Нужно выводить статистику в момент работы приложения.
Например deleaker умеет https://www.deleaker.com
Или свою статистику считать, если подозрительных классов немного, то это элементарно.
22 ноя 21, 19:00    [22399307]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
rgreat
Member

Откуда:
Сообщений: 7024
swame2
Если классы копятся в памяти но, но будут освобождены при выходе, то они не будут показаны как утечка.
Нужно выводить статистику в момент работы приложения.

Со времен WinNT все ресурсы освобождаются при завершении процесса. :)

Если классу в коде явно не делается Free/Destroy он будет показан как утечка при выходе.
22 ноя 21, 19:09    [22399311]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
Vizit0r
Member

Откуда: Одесса
Сообщений: 917
swame2
Andi_WEB,

Расходуемая память не обязательно является утечкой.
Если классы копятся в памяти но, но будут освобождены при выходе, то они не будут показаны как утечка.
Нужно выводить статистику в момент работы приложения.
Например deleaker умеет https://www.deleaker.com
Или свою статистику считать, если подозрительных классов немного, то это элементарно.


EL тоже умеет, но для этого надо чуток кода + это небыстро (совсем небыстро!) + потом надо постобработкой группировать обьекты - родная группировка как-то странно работает (съедает обьекты вроде, не помню уже подробностей, давно копал).
22 ноя 21, 19:21    [22399320]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
istrebitel
Member

Откуда:
Сообщений: 151
rgreat

Со времен WinNT все ресурсы освобождаются при завершении процесса. :)

Если классу в коде явно не делается Free/Destroy он будет показан как утечка при выходе.

Можно плодить кучу экземпляров с овнером в виде главной формы или дата модуля, память расходуется, а утечки при выходе нет.
22 ноя 21, 19:54    [22399340]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
rgreat
Member

Откуда:
Сообщений: 7024
Vizit0r
EL тоже умеет, но для этого надо чуток кода + это небыстро (совсем небыстро!) + потом надо постобработкой группировать обьекты - родная группировка как-то странно работает (съедает обьекты вроде, не помню уже подробностей, давно копал).
MadExcept лучше.

Сообщение было отредактировано: 22 ноя 21, 21:27
22 ноя 21, 21:27    [22399438]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4936
istrebitel
rgreat

Со времен WinNT все ресурсы освобождаются при завершении процесса. :)

Если классу в коде явно не делается Free/Destroy он будет показан как утечка при выходе.

Можно плодить кучу экземпляров с овнером в виде главной формы или дата модуля, память расходуется, а утечки при выходе нет.
Ну, правильно. Потому, что для них будет явно вызван деструктор в деструкторе главной формы.
22 ноя 21, 23:15    [22399471]     Ответить | Цитировать Сообщить модератору
 Re: Утечки памяти в приложении - FasMM, EurekaLog  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 2093
Andi_WEB
> Если мегабайт в секунду, то было бы...

Имелось в виду, на мегабайт в секунду начинает увеличиваться объем потребляемой памяти по диспетчеру. До этого - около 30 мегабайт на протяжении пары часов. Потом резко увеличиваетсмя до 130 мб в течении короткого промежутка времени. Вот прям случайно это земетил, совпадение. А потом опять несколько часов работает на 130 мб...

если утекают сущности, связанные с коннектом, то при массовых реконнектах может быть именно такая картинка
освобождается ли память при штатном завершении websocket соединения? закрытии tcp коннекта без отправки вебсоктного фрейма close? при обрыве соединения?
23 ноя 21, 07:00    [22399498]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить