Режимы сбора мусора: если на сервере существует 2 приложения, то ограбляет ли «Режим сервера» Питера, чтобы он заплатил Полу? - PullRequest
6 голосов
/ 03 августа 2011

2 участника (при необходимости я могу разделить вопросы, чтобы назначить отдельные правильные ответы):

Мы находимся в ситуации, когда работа в режиме сервера, скорее всего, уместна: у нас на одной ферме работают 2 приложения уровня предприятия. Если я переведу режимы сбора настроек обоих приложений в «Режим сервера», рискую ли я повредить одно приложение каждый раз, когда другое GC?

Будет ли сетевой балансировщик нагрузки отводить трафик от машины в середине GC (снова в режиме сервера)?

EDIT Я разбил часть этого вопроса, посвященную балансировке нагрузки, на следующее: На балансировщик сетевой нагрузки веб-фермы влияет напряжение GC?

Ответы [ 3 ]

3 голосов
/ 03 августа 2011

Если вы обеспокоены тем, что два корпоративных приложения влияют на производительность друг друга, рассмотрите возможность их перемещения в две отдельные виртуальные машины.

GC оптимизирован и работает в своем собственном потоке (ах). Он разработан, чтобы быть невидимым для текущего приложения. Таким образом, на многопроцессорном корпоративном сервере отдельный процесс не должен быть поврежден вообще.

С другой стороны, сервер все еще получает некоторую нагрузку от GC. Если вы чувствуете, что GC каким-то образом замедляет работу ваших приложений, вы, вероятно, можете выполнить некоторое профилирование памяти и процессора, чтобы увидеть, в чем проблема. Вы можете найти способ оптимизировать код и использовать меньше ресурсов.

От J.Richter "CLR via C # v3" стр.585

Этот режим настраивает сборщик мусора на стороне сервера. Приложения. Сборщик мусора предполагает, что нет других приложений (клиент или сервер) работают на машине, и это предполагает, что все процессоры на машине доступны для сборки мусора. это Режим GC приводит к разделению управляемой кучи на несколько разделов, один на процессор. Когда начинается сборка мусора, сборщик мусора имеет один поток на процессор; каждый поток собирает свой собственный раздел в параллельно с другими потоками. Параллельные коллекции хорошо работают для серверные приложения, в которых рабочие потоки имеют тенденцию демонстрировать равномерное поведение. Эта функция требует запуска приложения на компьютере с несколькими процессорами, так что потоки могут быть действительно работать одновременно для достижения улучшения производительности.

1 голос
/ 03 августа 2011

С MSDN (выделение добавлено)

Рабочая станция - это режим GC по умолчанию, который доступен только на однопроцессорных компьютерах.Рабочая станция GC размещается в консольных приложениях и приложениях Windows Forms.Он выполняет полные (поколение 2) коллекции одновременно с запущенной программой, тем самым сводя к минимуму задержки.Этот режим полезен для клиентских приложений, где воспринимаемая производительность обычно важнее, чем необработанная пропускная способность.

Серверный ГХ доступен только на многопроцессорных компьютерах. Создает отдельную управляемую кучу и поток для каждого процессора и выполняет сборы параллельно.Во время сбора все управляемые потоки приостанавливаются (потоки, выполняющие собственный код, приостанавливаются только после возврата собственного вызова).Таким образом, режим GC сервера максимизирует пропускную способность (количество запросов в секунду) и повышает производительность по мере увеличения числа процессоров.Компьютеры с четырьмя или более процессорами обеспечивают повышенную производительность.Все приложения с управляемым кодом, использующие API-интерфейс Lync Server, должны использовать сервер GC.

В режиме сервера GC периодически запускается на всех процессорах параллельно.Это может лишить другие приложения времени ЦП во время сбора.

Таким образом, режим сервера может повысить производительность приложения, но может ухудшить производительность других приложений, работающих на том же сервере.Все это очень умозрительно - я думаю, что вам придется провести некоторый тест, чтобы проверить скорость и быстродействие ваших приложений, чтобы точно знать.

0 голосов
/ 03 августа 2011

Я видел выделение памяти из-за ленивого GC, которое раньше казалось не связывало процессы. Тем не менее, похоже, что режим сервера не делает этого (перегружает системную память, чтобы уменьшить частоту сбора данных), поэтому с вами все будет в порядке.

...