У меня есть несколько основных серверов Windows 2008 R2 24, которые запускают один и тот же процесс, но каждый экземпляр процесса имеет свой набор данных.Обычно на каждом сервере выполняется 2-4 экземпляра процесса.Процессы скомпилированы для x64, имеют графический интерфейс и используют GC рабочей станции.
Каждую секунду процесс выводит счетчики GC в файл журнала на локальном диске.Журнал используется и для многих других вещей.Время от времени я обнаруживаю, что один из этих процессов приостанавливает выполнение на 5 и более секунд.Я вижу, что ничего не записывается в журнал за этот промежуток времени.Каждый раз, когда это происходит, число GC Gen2 увеличивается на 1.
Это редкое событие.Это может происходить, может быть, один раз каждые 10000 генераторов GC2 во всех процессах.
На каждой машине более чем достаточно ОЗУ для хранения всех процессов в ОЗУ.
Сегодня утром у меня была 9-секундная пауза в одном изпроцессы и на этот раз я захватил счетчики производительности для затронутого процесса и всей машины.Ни один из других процессов, запущенных в то время, не был затронут.Анализ счетчиков производительности показывает следующее:
Сравнение после паузы с перед паузой:
- Виртуальные байты, Байты файла подкачки, Виртуальные байты, Рабочий набор и Рабочий набор-Приватныйдля процесса упал примерно на столько же - 1Гб.Чтобы дать представление о размере процесса, число приватных байтов сократилось с 3,1 ГБ до 2,1 ГБ.
- Количество дескрипторов процесса уменьшилось с 8835 до 8705
- Доступно байт для всей машиныувеличилось примерно на 1 Гбайт
- Неисправности страниц / сек.
- Загрузка ЦП была стабильной во время паузы
Может ли кто-нибудь подтвердить, что это действие можно отнести кзамена?Учитывая, что на машинах более чем достаточно оперативной памяти, есть ли какие-либо предложения по исправлению этих пауз?
Обновление № 1 (05.03.2012):
Пережил 6,5-секундную паузу в одном изпроцессы сегодня.Счетчики производительности памяти .NET Clr показывают, что размер LOH не изменился, но размер кучи Gen 2, а также размер всех куч и общее количество принятых байтов сократились на 700 Мб.Всего зарезервированных байтов уменьшено на 250 Мб.Похоже, что в этом конкретном GC было исправлено много мусора в Gen2.
Обновление № 2 (3/6/2012):
Сегодня в одном из процессов произошла 7-секундная пауза,Отброшены следующие значения: размер кучи поколения 2 (память .NET CLR) на 900 МБ Num байт во всех кучах (память .NET CLR) на 900 МБ Num Total Commited Bytes (.NET CLR Memory) на 800 МБ Num всего зарезервированных байтов (.NET CLR Memory) на 540 МБ виртуальных байтов (процесс) на 550 МБ рабочего набора (процесс) на 800 МБ рабочего набора - частный (процесс) Байты файла страницы (процесс) на 800 МБ частные байты (процесс) на 800 МБ
LOH остался прежним