powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Остановка потоков сервиса на период сборки мусора.
25 сообщений из 61, страница 1 из 3
Остановка потоков сервиса на период сборки мусора.
    #39368497
_r2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Соственно есть .net сервис, у него в оперативке живет 3 гигабайта данных.
Сервис получает данные по протоколу tcp/ip и отдает их дальше по этому же протоколу.
В обычном режиме работы сервис каждую минуту засыпает полностью на 100-200 мс.
Сервис работает на платформе 4.5, с ней время стало меньше чем было на 4.0.
В случае резкого роста трафика, в целом не сильно, может мегабайт 20-100.
Сервис обработав данные засывает на время от 3-х до 5-ти секунд.
Утечек памяти нет, так как что сервис выделяет, то он тут же освобождает.
И с одним и тем же объемом месяц работает.
Сборщик мусора работает в серверном, и конкурентном режиме.
Версия clr: 4.0.30319.42000

В общем заказчик хочет, что бы этих засыпаний на 100-200 мс не было.

Отсюда вопроса, это возможно?

Спасибо.
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368503
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_r2003,

А чем ему заниматься в эти 200 мс? Биткойны обсчитывать?
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368516
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не очень понял "Каждую минуту засыпает на 100-200 мс"
обычно сервис работает в цикле и засыпает после каждой итерации, а не каждую минуту.
Может у вас там где то таймер или еще какая то фигня, которая во время выполнения не выполняется, а попадает в пул, а как только работа выполнилась все накопленные "тики" в каком то пуле начинают выполняться и программа весит пока этот пул не освободится?
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368529
_r2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) Что входящий запрос попадает на эту задержку, в итоге в целом время обработки конкретного запроса становится больше.
2) Он засыпает в удобное ему время на удобное ему время, а в целом за минуту набегает 200мс. Хотя обычно порции по 100 мс.
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368545
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_r2003,

Для предотвращения интенсивной сборки мусора, постарайся больше кешировать данные. Практики универсального переиспользования блока памяти сложны в среде .NET, и всегда намного проще обойтись грамотным кешированием. Всё что можно положить в кеш, должно быть туда положено. Больше без конкретики сказать ничего нельзя. Ручное управление сборкой мусора -- последнее, к чему стоит обращаться.
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368564
_r2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,

Я бы не сказал, что сборка интенсивная. 2-4 раза за минуту.
Причем, освобождается до 1000 объектов за минуту.
Что в общемто не много, просто поток останавливается на 200мс.
Как раз эти задержки и являются порблемой.
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368610
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй сборку мусора запускать принудительно в моменты когда делать нечего. Например закончил обработку запроса, освободил все ненужное - запустил сборку мусора. Или после каждого N-го запроса. Или по каким-то признакам предугадывать что ближайшие 100-200 мс запросов не будет - значит можно почиститься пока делать нечего.
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368632
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Листы заменить на массивы, классы на структуры :)
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368633
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttРучное управление сборкой мусора -- последнее, к чему стоит обращаться.
хороший совет для hello, world!
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368783
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЛисты заменить на массивы

Однофигственно.
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368786
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилхороший совет для hello, world!

Это как вскрыть тебе голову, чтобы разобраться, почему у тебя плохое настроение. Очень хороший совет для любых проектов.
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368788
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_r2003Как раз эти задержки и являются порблемой.

Отказаться от сборки мусора? Не вариант. Снизить количество мусора -- вариант. Кеширование!
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368792
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_r2003,

Ещё можно... не, нужно, провести профилирование. Что конкретно является источником мусора. Мы для профилирования используем dotTrace, отличное средство для ловли причин "blocking GC".
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368808
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttСнизить количество мусора -- вариант
как количество мусора влияет на построение графа доступных объектов?
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368821
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_r2003,

помимо очевидных советов gcmode и loh могут помочь наверное.
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368833
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилкак количество мусора влияет на построение графа доступных объектов?

1. Вот здесь подробно написано

https://msdn.microsoft.com/ru-ru/library/ee787088(v=vs.110).aspx

2. Делаем тестовый проект, начинаем генерировать разнокалиберный мусор и смотрим когда и как часто запускается уборка мусора.

Чем быстрее заполняется поколение 0, тем быстрее наступит уборка мусора. Если программа создаёт очень много объектов, которые используются очень короткое время, то GC срабатывает чаще. Искоренить это можно, снизив количество таких объектов.

Да, можно поиграть с переиспользованием памяти, со структурами, но это вовсе не бесплатно. Ручное управление GC чаще приносит вред, чем пользу.
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368843
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_r2003,

Ещё могу посоветовать перейти на 4.6, начиная с 4.5 в .NET была проделана большая работа по оптимизации работы GC.

В 4.6 были добавлены такие штуковины, как TryStartNoGCRegion и EndNoGCRegion, на определённом участке можно запретить, точнее, настойчиво рекомендовать не заниматься уборкой мусора.

Больше информации о новых возможностях здесь: https://msdn.microsoft.com/en-us/library/ms171868(v=vs.110).aspx#v46
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368873
Т-Миронов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно разбираться что это за 3гб. Если они подлежат сборке значит нужно ранить сборщик самостоятельно почаще. Если этор неподлежащиц сборке граф н6ужно выносить его в Large Object Heap. Что это за 3ГБ?
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368906
Т-Миронов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще надо профайлером посмотреть каким-нибудь и все будет ясненько.

вот тут можно посмотреть как пользоваться бесплатной perfVew
YouTube Video
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368930
_r2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, за советы.

3Гб - это конкурентные словари, со справочной информацией.
ConcurrentDictionary<int,Справочник>
Они нужны для обработки данных.
Удалить их из сервиса нельзя.
Как их перенести в Large Object Heap?

Дело в том, что в целом создается и удаляется не значительное количество объектов.
Из входящего набора байт формируется объект.
Дальше этот объект обрабатывается и освобождается.
Таких объектов не много.

Важно что ОЗУ 32 гига, из них занято только четыре.
Не понятно, зачем делать очистку мусора куждую минуту.
В моем понимание, на раз в каждые 8 часов, памяти должно хватать.

Спасибо.
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39368957
Т-Миронов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_r2003,

Чтоб перенести в LOH что-то нужно создать свой из непрырывный блок памяти больше 85kb и уже в этом блоке размещать свои объекты.
Можно почитать например здесь.
http://stackoverflow.com/questions/2510975/c-sharp-object-pooling-pattern-implementation

Можно попробовать GC с concurrent на Background переставить. Но нужно убедиться что дело в словарях.
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39369132
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_r2003Спасибо, за советы.

3Гб - это конкурентные словари, со справочной информацией.
ConcurrentDictionary<int,Справочник>
Они нужны для обработки данных.
Удалить их из сервиса нельзя.
Как их перенести в Large Object Heap?
.
.

Если они используются постоянно, то их не надо никуда переносить, их нужно сделать рутами, чтоб gc их не трогал. Тем более как ты говоришь памяти много
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39369376
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisЕсли они используются постоянно, то их не надо никуда переносить, их нужно сделать рутами, чтоб gc их не трогал. Тем более как ты говоришь памяти много

Если ссылки на 3Гб достижимые, то GC их трогать не будет. Надо смотреть профайлером, чего он там колбасит.
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39369378
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще можно попробовать заменить конкурентдикты на обычные с локами. Частенько выходит и быстрее и менее прожорливо.
...
Рейтинг: 0 / 0
Остановка потоков сервиса на период сборки мусора.
    #39369385
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.еще можно попробовать заменить конкурентдикты на обычные с локами. Частенько выходит и быстрее и менее прожорливо.

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


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