Высокая загрузка ЦП w3wp.exe - проблема с ГХ?

Я унаследовал сайт, который использует много состояний сеанса. Недавно мы испытывали постоянную высокую загрузку процессора ~95-100% в течение длительного периода времени.

При отладке с использованием DebugDiag он показывает, что в куче больших объектов было ~3 ГБ, что, как я полагаю, собрано во втором поколении GC и может быть причиной высокой загрузки процессора.

У меня практически нулевой опыт отладки таких сценариев, но звучит ли приведенная выше правдоподобная причина высокой загрузки ЦП?

Благодарю.

1 ответ

Решение

Вы можете проверить, является ли проблема с GC, с помощью системного монитора и счетчика производительности ".NET Memory\% Time in GC". Если у вас есть только один процесс.NET на сервере, вы можете просто использовать экземпляр _total. В противном случае вам нужно будет найти экземпляр с соответствующим идентификатором процесса и просмотреть его (но помните, что имя экземпляра для вашего приложения может измениться на лету, если какое-либо приложение запустится или закроется).

Если пики в этом счетчике соответствуют пикам ЦП, сборка мусора - ваша проблема - вам нужно будет искать утечки, выделять меньше объектов, держать объекты достаточно маленькими, чтобы не допустить их в LOH, держать их вокруг меньше времени, повторно использовать их и / или устранить деструкторы. Каждая из этих вещей сократит время, проведенное в GC. По иронии судьбы, слишком большое кеширование может сделать ваш сайт непоследовательно не отвечающим, поскольку кэшированные элементы в конечном итоге оказываются в куче 2, и обработка запросов приостанавливается, пока GC просматривает каждый элемент в куче 2. По мере увеличения нагрузки на память частота этих блокировок увеличивается до тех пор, пока Ваши запросы полностью истощены.

Другие вопросы по тегам