Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Способы борьбы с фрагментацией памяти / 25 сообщений из 65, страница 1 из 3
21.07.2021, 17:54
    #40085168
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
Всем доброго дня,

10.4.1, х32
большая программа состоящая из множества модулей (dll, ocx и проч) по отзывам клиентов через несколько часов работы замедляется. Причём не только сама замедляется, замедляет также остальные программы запущенные на этом PC. Даже если нагрузка на процессор небольшая и количество свободной памяти достаточное.
Если программу закрыть и открыть снова скорость восстанавливается. В процессе выяснения причин подозрение пало на фрагментацию памяти.
Соотв. возникло несколько вопросов.
1. Как это проверить? Есть ли какие средства позволяшщие оценит степень фрагментации памяти?
2. Как с этим бороться? Возможно ли в фоне проводить дефрагментацию памяти? Возможно изменить настройки менеджера памяти? Выполнить какие другие действия....
По утверждениям тех же клиентов ещё пару лет назад такой проблемы не наблюдалось. У эбаркадеры что то кардинально менялось в направлении работы с памятью последние несколько лет?

Спасибо за любые советы и ссылки.
...
Рейтинг: 0 / 0
21.07.2021, 18:14
    #40085174
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
hlopotun,

Это у вас скорее всего не с памятью проблемы, а с утечкой ресурсов: GDI-объекты, дескрипторы и пр.

Обычно в этом случае ОС начинает хорошо так лагать. Выделение этих объектов можно посмотреть в стандартном диспетчере задач.
...
Рейтинг: 0 / 0
21.07.2021, 18:15
    #40085175
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
hlopotun
В процессе выяснения причин подозрение пало на фрагментацию памяти.

Пальценебным методом, я полагаю? Было бы интересно хотя бы услышать ответ на вопрос - какой памяти.

hlopotun
По утверждениям тех же клиентов ещё пару лет назад такой проблемы не наблюдалось.

А они за последние пару лет, случаем, десятку не обновляли?
...
Рейтинг: 0 / 0
21.07.2021, 18:44
    #40085180
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
hlopotun,

самый простой способ избавиться от накапливаемых ошибок - это вынести проблемный код в отдельный процесс, который можно периодически прибивать и перезапускать
...
Рейтинг: 0 / 0
21.07.2021, 18:44
    #40085181
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
Фрагментация влияет, только если размещать большие куски зараз (в ОП не найдется непрерывного куска - уйдет в своп), или мега-производительно бегать по массивам (кеши процессора, вот это все). Остальное будет незаметно. Так что смотреть загрузку ОП и свопа, а потом идти хэндлы проверять
...
Рейтинг: 0 / 0
21.07.2021, 19:35
    #40085191
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
Zelius
самый простой способ избавиться от накапливаемых ошибок - это вынести проблемный код в отдельный процесс, который можно периодически прибивать и перезапускать


плавно переходим к теме "Микросервисная архитектура приложений на Delphi"
...
Рейтинг: 0 / 0
21.07.2021, 22:03
    #40085205
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
"Узнай автора по названию темы".
Очередной бессмысленный топик.
...
Рейтинг: 0 / 0
21.07.2021, 22:15
    #40085210
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
hlopotun

1. Как это проверить? Есть ли какие средства позволяшщие оценит степень фрагментации памяти?

rammap

hlopotun

2. Как с этим бороться? Возможно ли в фоне проводить дефрагментацию памяти? Возможно изменить настройки менеджера памяти? Выполнить какие другие действия....

Переход на Win64 решает большинство проблем.
...
Рейтинг: 0 / 0
21.07.2021, 23:24
    #40085226
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
Соколинский Борис
Переход на Win64 решает большинство проблем.
как? если прога 32 бит.
...
Рейтинг: 0 / 0
21.07.2021, 23:33
    #40085230
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
Relic Hunter,
прогу переделать под Win64, вестимо, вместе со всей требухой.
...
Рейтинг: 0 / 0
22.07.2021, 00:18
    #40085247
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
Соколинский Бориспрогу переделать под Win64

Некому.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.07.2021, 00:37
    #40085252
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
Непонятно как фрагментация может вызывать замедление. Выделение памяти может произойти или не произойти по причине её отсутствия. А вот если очереди выстроились к какому-то ресурсу, то да. Пулу соединений к БД, например.
...
Рейтинг: 0 / 0
22.07.2021, 01:16
    #40085258
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
Relic Hunter
Непонятно как фрагментация может вызывать замедление. Выделение памяти может произойти или не произойти по причине её отсутствия.


Менеджеру памяти (МП) нужно как-то найти кусок памяти, который он выделит - а у него есть список (а то и несколько) освобожденных кусков, которые он может объединять, если они соседние и пр.
Логика работы МП - тема для долгих бесед, некоторое замедление конкретного приложения он может вызвать, но тормозить всю систему - сомнительно.
...
Рейтинг: 0 / 0
22.07.2021, 08:20
    #40085272
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
Я в этом году сталкивался с фрагментацией стандартного ММ в D2007.
При каждой операции синхронизации справочников утекало порядка 50Кб. Делал порядка 100 операций и каждый раз память увеличилась на 50 Кб, в коде ошибок не было, поэтому сделал вывод что это фрагментация. Проблема решилась после переноса вызова метода Free для одного из объектов на несколько строк выше.
...
Рейтинг: 0 / 0
22.07.2021, 09:35
    #40085283
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
DmSer
Я в этом году сталкивался с фрагментацией стандартного ММ в D2007.
При каждой операции синхронизации справочников утекало порядка 50Кб. Делал порядка 100 операций и каждый раз память увеличилась на 50 Кб, в коде ошибок не было, поэтому сделал вывод что это фрагментация. Проблема решилась после переноса вызова метода Free для одного из объектов на несколько строк выше.


тут так просто всё не будет.
Огромная программа которая уже более 25 лет растёт, не один десяток программистов приложили руку. Одних только самописных фреймворков несколько штук, есть модули из delphi 5 без исходников, мегатонны кода. Всё это работает и запускается в рамках одного х32 приложения.Взять это и одним махом перенести на х64 не получится. Слишком большой объём работ. Для начала надо разобраться, действительно ли фрагментация причина или как выше написали не освобождение ресурсов или ещё что. Как только это не освобождение может влиять на сторонние программы если памяти достаточно и процессора не нагружены (по меньшей мере так выглядит в менеджере задач винды). Разбираться надо короче.
Для начала хорошо бы какую статью почитать с разбором поиска подобных проблемм. И какие инструменты и методики лучше использовать при этом разборе. Например, есть ли вообще вожможность визуализировать фрагментацию памяти и её заполнение.

Спасибо всем за участие.
...
Рейтинг: 0 / 0
22.07.2021, 09:44
    #40085286
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
Fr0sT-Brutal
Фрагментация влияет, только если размещать большие куски зараз (в ОП не найдется непрерывного куска - уйдет в своп), или мега-производительно бегать по массивам (кеши процессора, вот это все). Остальное будет незаметно. Так что смотреть загрузку ОП и свопа, а потом идти хэндлы проверять


тут как раз наверное случай с самописными датасетами/массивами которые работают и с paradox и с firebird и тащат всё сразу в память.
...
Рейтинг: 0 / 0
22.07.2021, 10:03
    #40085296
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
вот нашел у мелкомягких софтину RamMap .
Хоть фрагментацию и не показывает но карту памяти строит.
...
Рейтинг: 0 / 0
22.07.2021, 10:14
    #40085302
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
hlopotun
Как только это не освобождение может влиять на сторонние программы если памяти достаточно и процессора не нагружены (по меньшей мере так выглядит в менеджере задач винды). Разбираться надо короче.

Если памяти достаточно, то не в фрагменатции дело, кмк. Смотри на хэндлы.
...
Рейтинг: 0 / 0
22.07.2021, 10:39
    #40085310
swame2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
hlopotun,

Не факт, что это фрагментация памяти.
Я бы все-таки начал с исследования производительности профайлером.
Может программа тормозит при вызове каких то внешних процессов или ресурсов, тогда большой загрузки процессор не покажет.
А профайлер покажет.
Может растут какие то списки и идет поиск перебором в них (но тогда процессор покажет увеличение загрузки).
Я пользуюсь профайлером https://www.prodelphi.de.
Ну а чтобы мониторить это все на постоянной основе - логирование времени выполнения всех кусков кода при превышении лимита времени выполнения, от крупных к мелким.
...
Рейтинг: 0 / 0
22.07.2021, 11:00
    #40085317
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
Слон в комнате:
hlopotun
Причём не только сама замедляется, замедляет также остальные программы запущенные на этом PC.


Память в программах виртуальна ужо больше 25 лет. Никаким макаром память в вашей программе не может влиять на ядро или другие программы.
...
Рейтинг: 0 / 0
22.07.2021, 11:11
    #40085319
Barmaley57
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
GunSmoker
Слон в комнате:
hlopotun
Причём не только сама замедляется, замедляет также остальные программы запущенные на этом PC.


Память в программах виртуальна ужо больше 25 лет. Никаким макаром память в вашей программе не может влиять на ядро или другие программы.
Да запросто! "Отберите" у приложений их рабочие наборы и они прекрасно все вместе будут их подгружать заново и тормозить всю систему.
...
Рейтинг: 0 / 0
22.07.2021, 11:14
    #40085320
Barmaley57
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
Надо смотреть, что вообще творится с памятью. Сколько физической. Какие операции с ней производятся. Может тупо система не успевает отдавать "обнуленные" страницы.
...
Рейтинг: 0 / 0
22.07.2021, 11:19
    #40085324
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
GunSmoker
Слон в комнате:
hlopotun
Причём не только сама замедляется, замедляет также остальные программы запущенные на этом PC.


Память в программах виртуальна ужо больше 25 лет. Никаким макаром память в вашей программе не может влиять на ядро или другие программы.


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

Спасибо.
...
Рейтинг: 0 / 0
22.07.2021, 11:24
    #40085327
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
на просторах сети нащел интересную книгу и тут обзорное https://www.youtube.com/watch?v=_0_cUcygmLU
...
Рейтинг: 0 / 0
22.07.2021, 11:28
    #40085329
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Способы борьбы с фрагментацией памяти
hlopotun
Фрагментация организованная одним приложением мешает выделять цельные блоки другому приложению

GunSmoker
Память в программах виртуальна ужо больше 25 лет. Никаким макаром память в вашей программе не может влиять на ядро или другие программы.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Способы борьбы с фрагментацией памяти / 25 сообщений из 65, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]