OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 22 Ноябрь, 2019 03:49

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Загадка со сборкой мусора
СообщениеДобавлено: Вторник, 07 Июль, 2009 13:18 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Обычно в системе со сборкой мусора используемая память медленно растёт, растёт, растёт, а потом бух и быстро упала (запустился сборщик мусора и всё собрал). Потом опять растёт, растёт, растёт, и бух упала и т.д. На графике использования памяти получается пила с "левым ходом".

Я сейчас в своей программе прикрутил кеширование некоторых часто используемых объектов.

После этого на графике использования памяти получается пила не с "левым", а с "правым ходом" :? :? :?
(память сначала относительно быстро нарастает, а потом меееееедленно уменьшается), странно...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загадка со сборкой мусора
СообщениеДобавлено: Вторник, 07 Июль, 2009 13:51 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3109
Откуда: Астрахань
Это ты пилу с другого конца смотришь... :mrgreen:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загадка со сборкой мусора
СообщениеДобавлено: Вторник, 07 Июль, 2009 13:52 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Вумный .нет изменил стратегию сборки мусора/выделения памяти?

Вообще деталей реализации бы... А то так сложно сказать... Вдруг там где-нибудь явно дергается сборщик мусора?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загадка со сборкой мусора
СообщениеДобавлено: Вторник, 07 Июль, 2009 15:35 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Это под Linux на Mono. Явный вызов сборщика эффекта не давал. Там сборщик мусора консервативный. Слишком консервативный. Пришлось кэширование часто используемых объектов делать, а то память росла.

Микрософтовский сборщик мусора точный, так что под Windows работало нормально без кэширования.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загадка со сборкой мусора
СообщениеДобавлено: Вторник, 07 Июль, 2009 16:20 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Смотрите на зелёный график (красный - "больная" программа).
Первые 70 минут система была под нагрузкой. Потом нагрузку отключили. "Нагрузочные" объекты в "зелёной" программе кэшировались, а в "красной" - нет. Память в "красной" росла (хотя если бы она была запущена под Windows с точным сборщиком мусора, то память бы не росла).

В "зелёной" программе при включённом кэшировании "пила сборки мусора" - правая (пологость с правой стороны), а после отключения нагрузки (и кэширования) - левая (пологость с левой стороны):
Вложение:
memory3.png
memory3.png [ 23.92 КБ | Просмотров: 3886 ]


Последний раз редактировалось Сергей Губанов Вторник, 07 Июль, 2009 20:02, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загадка со сборкой мусора
СообщениеДобавлено: Вторник, 07 Июль, 2009 16:59 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Какой алгоритм кэширования? Что там вообще происходит? Можно смоделировать ситуацию максимально просто (до сотни строк кода)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загадка со сборкой мусора
СообщениеДобавлено: Среда, 08 Июль, 2009 07:45 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Кстати, а подобная картина (обратная пила) наблюдается при наличии кэширования как на моно так и на мелкомягком дотнете?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загадка со сборкой мусора
СообщениеДобавлено: Четверг, 09 Июль, 2009 20:04 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Там есть короткоживущие объекты (несколько миллисекунд), и долгоживущие (несколько десятков секунд). Вот некоторые долгоживущие я кэшировал. Кэш содержал не более сотни объектов каждого типа, а вообще объектов несколько тысяч.

Под Windows я не смотрел что будет, просто было некогда.

Сегодня нашёл у "красной" программы ещё и обычную составляющую "утечки" памяти не связанную с фрагментацией кучи и/или консервативностью сборщика мусора (там при большой нагрузке CDR-ы генерировались с большей скоростью чем отправлялись в БД, они накапливались в памяти).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загадка со сборкой мусора
СообщениеДобавлено: Вторник, 21 Июль, 2009 11:56 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Установлено, что на успешность работы Mono-вского сборщика мусора решающее значение оказывает вовсе не кэширование объектов само по себе (объекты можно не кэшировать), а... обнуление всех полей объекта после того как объект становится не нужным.

Зловещая консервативность :evil: :evil: :evil:


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB