ASP.NET Web Garden-сколько рабочих процессов мне нужно?
какова наилучшая практика для принятия решения о том, сколько рабочих процессов для обеспечения ASP.NET веб-приложение?
на одном сервере, которым я управляю, создание нового пула приложений по умолчанию составляет 10 (максимум) рабочих процессов. Другие люди предполагают, что нормальная настройка одна.
какую проблему решает несколько рабочих процессов и каковы методы для принятия решения о том, сколько?
4 ответа:
рабочие процессы-это способ сегментирования выполнения вашего веб-сайта через несколько exe-файлов. Вы делаете это по нескольким причинам, одна из которых, если один из работников получает удар по проблемам времени выполнения, он не снимает других. Например, если приходит запрос html, который заставляет процесс работать в никуда, то только другие запросы, которые обрабатываются этим одним рабочим процессором, убиваются. Другой пример заключается в том, что один запрос может вызвать блокировку против другого потоки обрабатываются одним и тем же работником.
насколько вам нужно, сделайте некоторое нагрузочное тестирование. Нажмите на приложение, трудно и посмотреть, что происходит только с одним. Затем добавьте еще немного к нему и ударил его снова. В какой-то момент Вы достигнете точки истинного насыщения сети машин, диска, процессора и оперативной памяти. Вот когда вы знаете, что у вас есть правильный баланс.
Кстати, вы можете контролировать количество потоков, используемых в рабочем процессе через машину.конфигурационный файл. Я считаю, что ключ maxWorkerThreads.
теперь, будьте осторожны, если вы используете сеанс, состояние сеанса не разделяется между рабочими процессами. Я вообще рекомендую избегать сессии в любом случае, но это то, что нужно учитывать.
для всех целей и задач вы можете рассматривать каждый рабочий процесс как отдельный веб-сервер. За исключением того, что они работают на одной коробке.
рекомендации здесь довольно хороши: http://msdn.microsoft.com/en-us/library/ms998549.aspx
Утечки Памяти
другим большим преимуществом является обработка утечек памяти. Иногда, сколько бы вы ни пытались оптимизировать свой код, но есть утечки памяти в самой платформе и других сторонних библиотеках. Мы заметили, что, в конечном итоге, наше приложение достигает очень высокой памяти, и начинает давать никаких исключений из памяти.
таким образом, мы должны были установить максимальный предел виртуальной памяти для рабочего процесса, как 1 ГБ и разрешить запуск нескольких процессов. Вы могли бы установить максимальный виртуальный предел даже для одного рабочего процесса, но это приводит к всплескам замедления, так как при повторном использовании рабочего процесса все запросы замедляются до тех пор, пока рабочий процесс не наберет хорошую скорость. Поскольку наше приложение имеет внутреннее кэширование (кэш запросов Entity Framework, некоторые пулы объектов), каждая из этих вещей замедляет запуск приложения. Это где один рабочий процесс болит больше всего.
Если существует несколько рабочих процессов, то только один из них находится в режиме рециркуляции медленно, но другие сохраняют хорошую скорость.
другой случай, когда имеет смысл иметь много рабочих процессов, если ваше приложение содержит замки, которые предотвращают ее распараллеливания. Одним из примеров является обработка изображений на основе GDI+.
Я нашел его, когда пытался найти решение для моя проблема.