|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Добрый день! Продолжаю эксперименты с ВЕБ-Сокетами. Озадачился такой проблемой. Программа (WIN32) после старта занимает в диспетчере около 30 мб. Сетевой обмен через сокеты не очень интенсивный - примерно 2 кб в секунду. Спустя несколько часов, буквально за пару минут, объем памяти, занимаемой программой плавно увеличивается до 130 мб. Случано заметил, т.к. в этот момент смотрел в диспетчере. Буквально, каждую секунду добавлялся лишний мегабайт. Потом несколько часов все работало нормально. Памямть не росла. Это Винда решила подкинуть памяти от щедрот своих для какой-то оптимизации обмена или это все же косяки где то, как думаете? Вот что дает FastMM c ReportMemoryLeaksOnShutdown := True; (скрин). Выглядит, конечно, неприятно, но даже при перемножении в уме никак не тянет на лишних 100 мб Поставил триал EurekaLog. И, к своему удивлению, ничего внятного от него пока получить не могу. Объем экзешника увеличился заментно, опции VCL и прочее выбраны, но ни в логе ничего нет, и при закрытии приложения никаких окон не появлятся. ReportMemoryLeaksOnShutdown := True; сначала закоментировал, конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 12:43 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Andi_WEB Выглядит, конечно, неприятно, но даже при перемножении в уме никак не тянет на лишних 100 мб Это оно просто не пишет память сожранную "внутри" этих классов. Перечисляет только "корневые" классы, так сказать. Поставил триал EurekaLog. И, к своему удивлению, ничего внятного от него пока получить не могу. Объем экзешника увеличился заментно, опции VCL и прочее выбраны, но ни в логе ничего нет, и при закрытии приложения никаких окон не появлятся. ReportMemoryLeaksOnShutdown := True; сначала закоментировал, конечно. Лучше MadExcept поставь. И проще пользоваться и без триала. Ну оно за тебя утечки не поправит. И так видно, что у тебя компоненты не удаляются после использования. Например 236 х TIdTCPClient. А где они создаются думаю ты и так знаешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 12:51 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
> Лучше MadExcept поставь. И проще пользоваться и без триала. > Ну оно за тебя утечки не поправит. И так видно, что у тебя компоненты не удаляются после использования. Согласен, спасибо. Буду копать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 12:55 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Чтоб поймать утечки, одного FastMM достаточно. Только учитывай, что если оно в режиме полной отладки, то куча намного больше за счет отладочной инфы. Ну и фаст может не отдавать системе однажды выделенную память, запасая ее у себя на будущее ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 13:34 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Andi_WEB Спустя несколько часов, буквально за пару минут, объем памяти, занимаемой программой плавно увеличивается до 130 мб. Случано заметил, т.к. в этот момент смотрел в диспетчере. Буквально, каждую секунду добавлялся лишний мегабайт. (несколько часов) * 3600 мегабайт. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 13:51 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Fr0sT-BrutalНу и фаст может не отдавать системе однажды выделенную память, запасая ее у себя на будущее Ни один ММ не отдаёт системе память сразу. Фаст не исключение. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 13:56 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Но все же, почему EurekaLog вообобще ничего не показывает? Хотя бы из интереса хотелось взглянуть. Исполняемый файл увеличился, опция для работы с VCL приложением стоит - а ни влогах (сменил путь на боле простой, на диске D), ни окна при закрытии приложения не появляется. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 14:09 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
> Если мегабайт в секунду, то было бы... Имелось в виду, на мегабайт в секунду начинает увеличиваться объем потребляемой памяти по диспетчеру. До этого - около 30 мегабайт на протяжении пары часов. Потом резко увеличиваетсмя до 130 мб в течении короткого промежутка времени. Вот прям случайно это земетил, совпадение. А потом опять несколько часов работает на 130 мб... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 14:13 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Andi_WEB Но все же, почему EurekaLog вообобще ничего не показывает? Хотя бы из интереса хотелось взглянуть. Исполняемый файл увеличился, опция для работы с VCL приложением стоит - а ни влогах (сменил путь на боле простой, на диске D), ни окна при закрытии приложения не появляется. Сейчас придет Алексей, и мягко поинтересуется, а что же там в опциях-то, в частности включена ли вообще галка про Leaks во вкладке Memory problems, и остальным из этого включаемого подраздела. И да, там еще и вкладка Resource Leaks есть, что с ней-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 14:31 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
По умолчанию в EurekaLog включена опция "Active only when running under debugger". P.S. Но вообще я большого смысла не вижу использовать трейсеры исключений для локальной отладки. У них цель другая - сообщить о проблеме с полей. Отладочный же инструмент типа FastMM в FullDebugMode всегда покажет больше деталей, потому что может использовать более тяжёлую артиллерию. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 14:37 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
> Отладочный же инструмент типа FastMM в FullDebugMode Добрый день. Но у меня D2006. Там он, кажется, порезанный. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 15:25 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Там его вообще нет. С лёгкостью устанавливается полный. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 15:32 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Andi_WEB, ну ты по названию классов "утекающих" объектов посмотри хоть. Как ты их создаешь и где удаляешь. Неужели трудно. TWebSocket, TidTCPClient. У тебя же не миллион мест в коде, где они встречаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 15:53 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Спасибо, уважаемые участники. Опции Leaks сам нашел, как-то но наитию. А вот Active only when running under debugger проглядел, каюсь. Но вот что интересно - окно со ссылкой при закрытии приложения стало появляться, но на долю секунды. Попасть в него тот еще квест. Может, там еще секреты есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 15:56 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
rgreat Лучше MadExcept поставь. +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 16:05 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Такого точно быть не должно. Есть ненулевая вероятность, что возникает какое-то исключение при попытке показать отчёт. Под отладчиком если запустить - уведомление об исключении будут? Ещё можно включить "Use Debug DCUs" и передать ключ командной строки --el_debug . При этом будет создан .csl файл в папке с .exe, куда будет записано всё, что происходит в приложении. Я, правда, не уверен, что поможет первое или второе, поскольку утечки проверяются, когда в приложении уже всё убито - в том числе поддержка исключений. Скорее всего, тут надо по шагам смотреть. Но если диалог появился, то файл отчёта должен быть уже создан. Он есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 16:06 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
> Есть ненулевая вероятность, что возникает какое-то исключение при попытке показать отчёт. Похоже, исключение возникает при закрытии моего приложения. Раньше его не было видно. Если умпеть нажать на окошко Еврики, то потом с ним можно работать. Разбираюсь дальше, что к чему, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 16:13 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Fr0sT-BrutalНу и фаст может не отдавать системе однажды выделенную память, запасая ее у себя на будущее Ни один ММ не отдаёт системе память сразу. Фаст не исключение. Я не про сразу, а про вообще ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 17:06 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Andi_WEB, Расходуемая память не обязательно является утечкой. Если классы копятся в памяти но, но будут освобождены при выходе, то они не будут показаны как утечка. Нужно выводить статистику в момент работы приложения. Например deleaker умеет https://www.deleaker.com Или свою статистику считать, если подозрительных классов немного, то это элементарно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 19:00 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
swame2 Если классы копятся в памяти но, но будут освобождены при выходе, то они не будут показаны как утечка. Нужно выводить статистику в момент работы приложения. Со времен WinNT все ресурсы освобождаются при завершении процесса. :) Если классу в коде явно не делается Free/Destroy он будет показан как утечка при выходе. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 19:09 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
swame2 Andi_WEB, Расходуемая память не обязательно является утечкой. Если классы копятся в памяти но, но будут освобождены при выходе, то они не будут показаны как утечка. Нужно выводить статистику в момент работы приложения. Например deleaker умеет https://www.deleaker.com Или свою статистику считать, если подозрительных классов немного, то это элементарно. EL тоже умеет, но для этого надо чуток кода + это небыстро (совсем небыстро!) + потом надо постобработкой группировать обьекты - родная группировка как-то странно работает (съедает обьекты вроде, не помню уже подробностей, давно копал). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 19:21 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
rgreat Со времен WinNT все ресурсы освобождаются при завершении процесса. :) Если классу в коде явно не делается Free/Destroy он будет показан как утечка при выходе. Можно плодить кучу экземпляров с овнером в виде главной формы или дата модуля, память расходуется, а утечки при выходе нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 19:54 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Vizit0r EL тоже умеет, но для этого надо чуток кода + это небыстро (совсем небыстро!) + потом надо постобработкой группировать обьекты - родная группировка как-то странно работает (съедает обьекты вроде, не помню уже подробностей, давно копал). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 21:27 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
istrebitel rgreat Со времен WinNT все ресурсы освобождаются при завершении процесса. :) Если классу в коде явно не делается Free/Destroy он будет показан как утечка при выходе. Можно плодить кучу экземпляров с овнером в виде главной формы или дата модуля, память расходуется, а утечки при выходе нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 23:15 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Andi_WEB > Если мегабайт в секунду, то было бы... Имелось в виду, на мегабайт в секунду начинает увеличиваться объем потребляемой памяти по диспетчеру. До этого - около 30 мегабайт на протяжении пары часов. Потом резко увеличиваетсмя до 130 мб в течении короткого промежутка времени. Вот прям случайно это земетил, совпадение. А потом опять несколько часов работает на 130 мб... если утекают сущности, связанные с коннектом, то при массовых реконнектах может быть именно такая картинка освобождается ли память при штатном завершении websocket соединения? закрытии tcp коннекта без отправки вебсоктного фрейма close? при обрыве соединения? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 07:00 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Дегтярев Евгений Andi_WEB > Если мегабайт в секунду, то было бы... Имелось в виду, на мегабайт в секунду начинает увеличиваться объем потребляемой памяти по диспетчеру. До этого - около 30 мегабайт на протяжении пары часов. Потом резко увеличиваетсмя до 130 мб в течении короткого промежутка времени. Вот прям случайно это земетил, совпадение. А потом опять несколько часов работает на 130 мб... если утекают сущности, связанные с коннектом, то при массовых реконнектах может быть именно такая картинка освобождается ли память при штатном завершении websocket соединения? закрытии tcp коннекта без отправки вебсоктного фрейма close? при обрыве соединения? Ты не выдумывай страшилки, просто покажу код. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 09:13 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
ъъъъъ, ?? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 09:18 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Дегтярев Евгений, Добрый день. У меня там кроме Веб-сокетов еще были обычные TCP-клиеты. Вот они создавались динамически, а для предыдущих экземпляров только принудительно разрывалось соединение. Согласен, что это неправильно. Но счет им, в любом случае, шел не на тысячи. Eureka заработала, лог можно изучить. За примерно пару часов - общаяя утечка составила около 50 кб, из них на клиентах более половины. Реконнектов там нет, просто разрыв соединения и создается новый клиент, который живет несколько десятков минут. Заинтересовало само явление - взрывной рост на примерно 100 мб в памяти (от 30 до 130) после нескольких часов. Потом стабилизация. Пока такого роста не зафиксировал, как назло. До работы с Eureka было дважды. Интересно, где! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 10:45 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Andi_WEB ... Заинтересовало само явление - взрывной рост на примерно 100 мб в памяти (от 30 до 130) после нескольких часов. Потом стабилизация. Пока такого роста не зафиксировал, как назло. До работы с Eureka было дважды. Интересно, где! Ну, или диспетчер памяти хапнул блок, или сам компонент. Вон, в С++, бывалоча, пихаешь новые данные в вектор, так в ём, векторе, память резервироваллась не "сколько надо прямо сейчас", а с каждым разом все больше, экспоненциально. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 11:08 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
> так в ём, векторе, память резервироваллась не "сколько надо прямо сейчас", а с каждым разом все больше, экспоненциально. И и меня есть подозрение, (дилетантское конечно) что это Винда расщедрилась. ИИ в ней так сработал типа. "На тебе пямяти, ты хороший парень, вдруг она тебе еще понадобится, все равно у меня ее еще дофига". Кстати! Вспомнил. Один раз я заметил даже, что примерно после часа-полутора работы на 130 мегабайтах было такое же "взрывное" увеличение до ~ 250 Мб по диспетчеру за пару минут. Сейчас, кстати, то же приложениие в том же окружении работает почти три часа. Потребление памяти - 26,4 Мб. Буду наблюдать, уже с Эврикой. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 12:40 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Можно предположить, конечно, что в моменты, предшествующие росту потребления памяти, вкладка в браузере была не активна - в основном, это действительно так, и данные по WEB-Socket "не выбирались". Но, насколькр я читал, JavaScript машина понижает приоритеты для таймеров например. А вот WS работают вроде как практически с обычным приоритетом. По линии TCP клиентов, т.к они в приложении, особых причуд быть не должно. Там связь постоянная и устойчивая, за исключением того, что отработавшие клиенты, как я уже говорил, не уничтожаются, а только отключаются. Ну и Эврика для TCP клиентов четко фиксирует утечку в десятки килобайт в час. А тут под сто метров... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 13:05 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Andi_WEB, я не знаю, что именно вы смотрите, но по умолчанию диспетчер задач показывает сколько RAM выделяется программе. Это значение крайне слабо коррелирует с количеством выделенной в программе памяти. У меня стоит Process Explorer в качестве диспетчера, но мне припоминается, что в штатном диспетчере Win10 в настройках была колонка Commit Size или что-то такое - это и будет реальное выделение памяти. Во-вторых, утечка памяти Delphi тоже не всегда связаны с утечками памяти вообще. Например, вы можете создать TBitmap и его утечка - это, сколько, килобайт? Но в нём же есть HBITMAP - это по сути ссылка на растр в памяти. Он может мегабайты занимать, но как утечка обнаружен не будет, т.к. выделяется через другой менеджер памяти, не через Delphi. Однако устранив утечку TBitmap (килобайта) - устраните и утечку HBITMAP (мегабайтов). Ну, или если ваш код делает detach HBITMAP из TBitmap и потом утекает HBITMAP - тогда да, тут уже надо искать утечки не памяти Delphi, а прочих ресурсов. Есть мнение, что надо начать с того, что устранить утечку уже найденного - начиная с самых комплексных объектов, типа TIdTCPClient, которых у вас утекло больше 200 штук! При этом, скорее всего, перестанут утекать и более мелкие, зависимые от него, объекты. Ну не знаю, какие-нибудь строки, TIdReply, TStringList... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 13:27 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
GunSmoker, > Есть мнение, что надо начать с того, что устранить утечку уже найденного - начиная с самых комплексных объектов, типа TIdTCPClient. Согласен, спасибо. Сегодня вечером сделаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 13:31 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Andi_WEB меня есть подозрение, (дилетантское конечно) что это Винда расщедрилась Не, винда дает столько, сколько попросишь. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 14:04 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
ъъъъъ Andi_WEB меня есть подозрение, (дилетантское конечно) что это Винда расщедрилась Не, винда дает столько, сколько попросишь. Иначе бы GlobalRealloc не срабатывал бы почти никогда. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 14:12 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
YuRock, VirtualAlloc() выделяет память блоками по 4К, сколько процесс запросит - столько и получит, не больше (и кратно). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 14:55 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
ъъъъъ YuRock, VirtualAlloc() выделяет память блоками по 4К, сколько процесс запросит - столько и получит, не больше (и кратно). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 16:19 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
YuRock Ну вот. Если процесс 1 байт запросил, то выделит 4к на самом деле. А вообще еще есть прослойка в виде FastMM. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 16:35 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
YuRockвыделит 4к на самом деле. На некоторых системах - 16. Меньшей пачкой физическая память на виртуальную просто не маппится. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 16:41 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov YuRockвыделит 4к на самом деле. На некоторых системах - 16... Это ж давно было. :) В MS DOS ещё, при работе с EMS. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 16:55 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Погонял тестовое приложение с уничтожением неактивных TCP-клиентов. Мне кажется, стало значительно лучше. Около 12 часов жесткой прокачки данных, под конец сеанса приложение занимало менее 60 мб памяти (по диспетчеру). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2021, 09:42 |
|
Утечки памяти в приложении - FasMM, EurekaLog
|
|||
---|---|---|---|
#18+
Andi_WEB, Когдато давным давно лет 6 назад решил переписать пару стандартных сокетов с заменой на Indy. Обнаружил утечку памяти в самих компонентах. Замена привела к декларируемому типу Integer. Так что ошибки есть еще и в сырцах. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2021, 13:24 |
|
|
start [/forum/topic.php?all=1&fid=58&tid=2036835]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 182ms |
0 / 0 |