Подтвердить что ты не робот

ASP.NET Web Garden - Сколько рабочих процессов мне нужно?

Какова наилучшая практика для определения того, сколько рабочих процессов разрешено для веб-приложения ASP.NET?

На одном сервере я управляю, создавая новый AppPool по умолчанию для 10 (максимальных) рабочих процессов. Другие люди предполагают, что нормальная настройка - одна.

Какую проблему решает множество рабочих процессов и каковы методы принятия решения о том, сколько?

4b9b3361

Ответ 1

Рабочие процессы - это способ сегментирования выполнения вашего веб-сайта через несколько exe. Вы делаете это по нескольким причинам: один, если один из рабочих забивается из-за проблем времени выполнения, это не снимает других. Например, если приходит html-запрос, который заставляет процесс запускаться в ничто, тогда будут убиты только другие запросы, которые обрабатываются этим рабочим рабочим процессором. Другим примером является то, что один запрос может блокировать другие потоки, обрабатываемые одним и тем же рабочим.

Насколько вам нужно, выполните некоторые нагрузочные тесты. Хит приложение трудно и посмотреть, что происходит только с одним. Затем добавьте еще немного и снова нажмите. В какой-то момент вы достигнете точки по-настоящему насыщения сети машин, диска, процессора и бара. Это, когда вы знаете, что у вас правильный баланс.

Кстати, вы можете контролировать количество потоков, используемых для каждого рабочего процесса, через файл machine.config. Я считаю, что ключ - это maxWorkerThreads.

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

Для всех целей и задач вы можете рассмотреть каждый рабочий процесс, поскольку он принадлежит отдельному веб-серверу. Кроме того, что они работают в одном окне.

Ответ 3

Утечки памяти

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

Таким образом, мы должны были установить максимальное ограничение виртуальной памяти для рабочего процесса как 1GB и разрешить запуск нескольких процессов. Вы можете установить максимальный виртуальный предел даже для одного рабочего процесса, но это приводит к замедлению замедления, так как когда рабочий процесс перерабатывается, все запросы медленны, пока рабочий процесс рабочего времени не достигнет хорошей скорости. Поскольку наше приложение имеет внутреннее кэширование (Entity Framework Query Cache, некоторые пулы объектов), каждая из этих вещей замедляет запуск приложения. В этом случае основной рабочий процесс ушибает больше всего.

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

Ответ 4

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

Я нашел его, когда попытался найти решение для моей проблемы.