ASP.NET/WCF: почему логические / физические потоки сбрасываются в полный цикл GC? - PullRequest
3 голосов
/ 10 марта 2010

недавно я записал несколько часов .NET счетчиков памяти службы WCF. Служба размещена в IIS на Win2k8, 8-ядерном, x64 с оперативной памятью 20 ГБ.

Я вижу, что ГХ довольно здоров, выполняя полную коллекцию только ок. каждые 2 часа!

Я заметил, что в тот же период времени количество физических и логических потоков увеличивается. Когда происходит полный сбор, количество физических и логических потоков уменьшается и продолжает снова подниматься до того же уровня.

Почему полный цикл сбора ГХ и падение потоков коррелируют? Почему количество потоков постоянно увеличивается?

Это чистая модель потоков ASP.NET/WCF. Нет пользовательских тем и т. Д.

Спасибо, Alex

1 Ответ

1 голос
/ 01 апреля 2010

Похоже, что ответ был действительно довольно прост: потоки создаются и умирают, поскольку пул потоков со временем увеличивается и уменьшается. Как правило, эти потоки имеют относительно длительный срок службы, что означает, что они заканчиваются в поколении 2. Поэтому они естественным образом очищаются только в полном цикле GC.

Интересным моментом является то, что приложение с очень хорошим управлением памятью может закончиться множеством мертвых потоков, которые я смог наблюдать в WinDbg. Это потому, что полный сборщик мусора может произойти только через несколько часов или даже дней! В одном блоге MS говорится, что эти мертвые потоки не очень хорошая вещь, поскольку соответствующий неуправляемый объект потока C ++ выглядит довольно ресурсоемким (к сожалению, найти этот чертов блог невозможно. Мне интересно, является ли это одним из тех редких случаев, когда индуцированный полный GC имеет смысл в определенный промежуток времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...