|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
Добрый день. Соственно есть .net сервис, у него в оперативке живет 3 гигабайта данных. Сервис получает данные по протоколу tcp/ip и отдает их дальше по этому же протоколу. В обычном режиме работы сервис каждую минуту засыпает полностью на 100-200 мс. Сервис работает на платформе 4.5, с ней время стало меньше чем было на 4.0. В случае резкого роста трафика, в целом не сильно, может мегабайт 20-100. Сервис обработав данные засывает на время от 3-х до 5-ти секунд. Утечек памяти нет, так как что сервис выделяет, то он тут же освобождает. И с одним и тем же объемом месяц работает. Сборщик мусора работает в серверном, и конкурентном режиме. Версия clr: 4.0.30319.42000 В общем заказчик хочет, что бы этих засыпаний на 100-200 мс не было. Отсюда вопроса, это возможно? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 12:21 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
_r2003, А чем ему заниматься в эти 200 мс? Биткойны обсчитывать? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 12:27 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
не очень понял "Каждую минуту засыпает на 100-200 мс" обычно сервис работает в цикле и засыпает после каждой итерации, а не каждую минуту. Может у вас там где то таймер или еще какая то фигня, которая во время выполнения не выполняется, а попадает в пул, а как только работа выполнилась все накопленные "тики" в каком то пуле начинают выполняться и программа весит пока этот пул не освободится? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 12:37 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
1) Что входящий запрос попадает на эту задержку, в итоге в целом время обработки конкретного запроса становится больше. 2) Он засыпает в удобное ему время на удобное ему время, а в целом за минуту набегает 200мс. Хотя обычно порции по 100 мс. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 12:43 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
_r2003, Для предотвращения интенсивной сборки мусора, постарайся больше кешировать данные. Практики универсального переиспользования блока памяти сложны в среде .NET, и всегда намного проще обойтись грамотным кешированием. Всё что можно положить в кеш, должно быть туда положено. Больше без конкретики сказать ничего нельзя. Ручное управление сборкой мусора -- последнее, к чему стоит обращаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 12:56 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
hVostt, Я бы не сказал, что сборка интенсивная. 2-4 раза за минуту. Причем, освобождается до 1000 объектов за минуту. Что в общемто не много, просто поток останавливается на 200мс. Как раз эти задержки и являются порблемой. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 13:08 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
Попробуй сборку мусора запускать принудительно в моменты когда делать нечего. Например закончил обработку запроса, освободил все ненужное - запустил сборку мусора. Или после каждого N-го запроса. Или по каким-то признакам предугадывать что ближайшие 100-200 мс запросов не будет - значит можно почиститься пока делать нечего. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 13:38 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
Листы заменить на массивы, классы на структуры :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 13:50 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
hVosttРучное управление сборкой мусора -- последнее, к чему стоит обращаться. хороший совет для hello, world! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 13:52 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
skyANAЛисты заменить на массивы Однофигственно. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 16:11 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
Изопропилхороший совет для hello, world! Это как вскрыть тебе голову, чтобы разобраться, почему у тебя плохое настроение. Очень хороший совет для любых проектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 16:12 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
_r2003Как раз эти задержки и являются порблемой. Отказаться от сборки мусора? Не вариант. Снизить количество мусора -- вариант. Кеширование! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 16:13 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
_r2003, Ещё можно... не, нужно, провести профилирование. Что конкретно является источником мусора. Мы для профилирования используем dotTrace, отличное средство для ловли причин "blocking GC". ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 16:15 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
hVosttСнизить количество мусора -- вариант как количество мусора влияет на построение графа доступных объектов? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 16:26 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
_r2003, помимо очевидных советов gcmode и loh могут помочь наверное. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 16:38 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
Изопропилкак количество мусора влияет на построение графа доступных объектов? 1. Вот здесь подробно написано https://msdn.microsoft.com/ru-ru/library/ee787088(v=vs.110).aspx 2. Делаем тестовый проект, начинаем генерировать разнокалиберный мусор и смотрим когда и как часто запускается уборка мусора. Чем быстрее заполняется поколение 0, тем быстрее наступит уборка мусора. Если программа создаёт очень много объектов, которые используются очень короткое время, то GC срабатывает чаще. Искоренить это можно, снизив количество таких объектов. Да, можно поиграть с переиспользованием памяти, со структурами, но это вовсе не бесплатно. Ручное управление GC чаще приносит вред, чем пользу. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 16:48 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
_r2003, Ещё могу посоветовать перейти на 4.6, начиная с 4.5 в .NET была проделана большая работа по оптимизации работы GC. В 4.6 были добавлены такие штуковины, как TryStartNoGCRegion и EndNoGCRegion, на определённом участке можно запретить, точнее, настойчиво рекомендовать не заниматься уборкой мусора. Больше информации о новых возможностях здесь: https://msdn.microsoft.com/en-us/library/ms171868(v=vs.110).aspx#v46 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 16:53 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
Нужно разбираться что это за 3гб. Если они подлежат сборке значит нужно ранить сборщик самостоятельно почаще. Если этор неподлежащиц сборке граф н6ужно выносить его в Large Object Heap. Что это за 3ГБ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 17:23 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
Вообще надо профайлером посмотреть каким-нибудь и все будет ясненько. вот тут можно посмотреть как пользоваться бесплатной perfVew ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 17:55 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
Спасибо, за советы. 3Гб - это конкурентные словари, со справочной информацией. ConcurrentDictionary<int,Справочник> Они нужны для обработки данных. Удалить их из сервиса нельзя. Как их перенести в Large Object Heap? Дело в том, что в целом создается и удаляется не значительное количество объектов. Из входящего набора байт формируется объект. Дальше этот объект обрабатывается и освобождается. Таких объектов не много. Важно что ОЗУ 32 гига, из них занято только четыре. Не понятно, зачем делать очистку мусора куждую минуту. В моем понимание, на раз в каждые 8 часов, памяти должно хватать. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 18:15 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
_r2003, Чтоб перенести в LOH что-то нужно создать свой из непрырывный блок памяти больше 85kb и уже в этом блоке размещать свои объекты. Можно почитать например здесь. http://stackoverflow.com/questions/2510975/c-sharp-object-pooling-pattern-implementation Можно попробовать GC с concurrent на Background переставить. Но нужно убедиться что дело в словарях. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 18:37 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
_r2003Спасибо, за советы. 3Гб - это конкурентные словари, со справочной информацией. ConcurrentDictionary<int,Справочник> Они нужны для обработки данных. Удалить их из сервиса нельзя. Как их перенести в Large Object Heap? . . Если они используются постоянно, то их не надо никуда переносить, их нужно сделать рутами, чтоб gc их не трогал. Тем более как ты говоришь памяти много ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2016, 05:19 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
PallarisЕсли они используются постоянно, то их не надо никуда переносить, их нужно сделать рутами, чтоб gc их не трогал. Тем более как ты говоришь памяти много Если ссылки на 3Гб достижимые, то GC их трогать не будет. Надо смотреть профайлером, чего он там колбасит. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2016, 20:05 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
еще можно попробовать заменить конкурентдикты на обычные с локами. Частенько выходит и быстрее и менее прожорливо. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2016, 20:13 |
|
Остановка потоков сервиса на период сборки мусора.
|
|||
---|---|---|---|
#18+
Denis.еще можно попробовать заменить конкурентдикты на обычные с локами. Частенько выходит и быстрее и менее прожорливо. В режиме многопоточного частого чтения и периодической записью не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2016, 20:35 |
|
|
start [/forum/topic.php?fid=20&msg=39368545&tid=1400130]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 280ms |
total: | 431ms |
0 / 0 |