Необычные образцы мусора - PullRequest
9 голосов
/ 08 февраля 2012

Я вижу некоторые необычные шаблоны сборки мусора в .net 4.0, которые я не могу объяснить, любой совет будет оценен.

В разное время при запуске моей программы счетчик сбора G2 начинает увеличиваться, и время GC% приближается к 100%.Это продолжается некоторое время перед остановкой (см. Снимок экрана системного монитора ниже).В течение этого времени трассировка PerfView событий CLR GC ETW показывает, что ряд долго работающих коллекций G2 запускаются вплотную по причине «AllocSmall».

Может ли кто-нибудь пролить свет на:

  1. Преимущественно, что вызывает событие 'AllocSmall'
  2. Почему это непосредственно вызывает сбор G2
  3. Почемуэти коллекции G2 происходят вплотную

LowMemory, по-видимому, не является проблемой, так как события запуска GC не несут это в качестве своего кода причины (http://msdn.microsoft.com/en-us/library/ff356162.aspx). Мы также видели похожиеситуации, в которых коллекции G0 происходят вплотную.

Редактировать: Было высказано предположение, что триггером может быть превышен некоторый порог. Учитывая, что память все еще доступна, я ожидаю, что куча G2разверните на этом этапе, а не пытайтесь собрать сборщик мусора.

Редактировать: Изображения, размещенные ниже, имеют гораздо более высокое разрешение, чем показы StackOverflow - просто откройте ссылку на изображение непосредственно на вкладке браузера..

Performance Monitor Trace PerfView Event Trace

1 Ответ

3 голосов
/ 08 февраля 2012

Причины сбора мусора:

  1. В системе недостаточно физической памяти.

  2. Используемая памятьпо выделенным объектам в управляемой куче превосходит допустимый порог.Это означает, что в управляемой куче превышен порог допустимого использования памяти.Этот порог непрерывно регулируется по мере выполнения процесса.

  3. Вызывается метод GC.Collect.Почти во всех случаях вам не нужно вызывать этот метод, потому что сборщик мусора работает непрерывно.Этот метод в основном используется для уникальных ситуаций и тестирования.

Похоже, что дело № 2, то есть вы «превысили приемлемый порог».+1 за неопределенность Microsoft.

...