Рекомендации по пулу приложений IIS 7.x

24

Мы собираемся развернуть несколько сайтов на некоторых новых серверах. У меня есть следующие вопросы о пулах приложений:

  1. Представляется целесообразным иметь один пул приложений для каждого веб-сайта. Есть ли какие-либо предостережения в отношении этого подхода? Будет ли один пул приложений загружать все ресурсы процессора, памяти и т. Д.?

  2. Когда следует разрешить несколько рабочих процессов в пуле приложений? Когда не стоит?

  3. Можно ли использовать ограничение частной памяти, чтобы один пул приложений не мешал другому? Слишком низкое значение приведет к тому, что действительные запросы перезапустят пул приложений без получения правильного ответа?

  4. В чем разница между частной и виртуальной памятью?

  5. Есть ли веские причины НЕ запускать один пул приложений на сайт?

Эрик Бурчам
источник
Первый вопрос к вам: это веб-сайты (например: .htm / .js) или веб-приложения (например, .aspx / .php)?
Кодирование Гориллы
В основном .Net 3.5 приложения. Одним из них является стороннее PHP-приложение.
Эрик Бурчам
1
Это довольно широкий круг тем - тема (и ответы @ CodingGorilla) интересны, но, возможно, она не совсем подходит для стиля Q-and-A
SF

Ответы:

20

1) Желательно иметь пул приложений для каждого сайта. Есть ли какие-либо предостережения в отношении этого подхода? Например, может ли один пул приложений загружать все ресурсы процессора, памяти и т. Д.?

Это довольно хороший подход; нет никаких веских причин, по которым я могу придумать, чтобы разные «сайты» (приложения) разделяли один и тот же пул. Если только им не нужен один и тот же ресурс. Одно приложение теоретически может потреблять много ресурсов ЦП или памяти, но изменение способа объединения приложений не сильно повлияет на это.

2) Когда следует разрешить несколько рабочих процессов в пуле приложений. Когда не стоит?

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

3) Можно ли использовать ограничение частной памяти для предотвращения вмешательства одного пула приложений в другой? Слишком низкое значение приведет к тому, что действительные запросы перезапустят пул приложений без получения правильного ответа?

а) теоретически

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

4) В чем разница между частной и виртуальной памятью?

Это очень сложно, вот быстрое сообщение, которое я нашел, которое может помочь: http://cybernetnews.com/cybernotes-windows-memory-usage-explained/

5) Есть ли веские причины НЕ запускать один пул приложений на сайт?

Опять же, единственная причина, по которой я могу придумать, - это если какой-то «общий ресурс» нужен нескольким приложениям, тогда вы захотите запустить их в одном и том же процессе.

Для приложений общего назначения и веб-сайтов IIS довольно хорошо настроен со значениями по умолчанию.

****ОБНОВИТЬ****

Что касается вашего запроса на дополнительную информацию о # 2, вы не должны делать это, если у вас нет особой необходимости сделать это. Даже если серверные действия занимают много времени, запросы обрабатываются с использованием нескольких потоков, и вы можете использовать «асинхронные запросы» для обработки долго выполняющихся задач (что освобождает поток пула потоков для обработки других запросов). На самом деле, я не могу придумать какой-либо веской причины разрешить несколько процессов для одного пула.

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

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

Кодирование Гориллы
источник
Я ценю вдумчивый ответ и принял его. Если у вас есть более конкретная информация для # 2, я был бы признателен. «Лучше всего оставлять в покое» - это, конечно, мудрый совет, но также полезно знать, когда нужно использовать несколько рабочих процессов. Я предполагаю, что это более уместно, когда у вас есть некоторые действия сервера, которые требуют много времени для возврата ответа, например, большой отчет, веб-сервис, который принимает большие сообщения, и тому подобное. Я также предполагаю, что все нормальные вещи параллелизма потока применяются?
Эрик Бурчам
Просто добавим: если вы ожидаете, что ваши приложения будут плохо играть вместе, в диалоговом окне установки IIS будет отмечено, что диспетчер системных ресурсов Windows можно установить и использовать для ограничения использования ресурсов процессора и памяти пулами приложений.
TristanK
@TristanK, спасибо за совет. Это было очень полезно.
Эрик Бурчам
@ Кодировка Горилла - Еще раз спасибо за понимание. Я решил серьезно заняться вопросом «зачем использовать веб-сад» и получил несколько ответов. Применяются все упомянутые вами предостережения, в частности, касающиеся асинхронного доступа к общим ресурсам, таким как различные кэши и пользовательские сеансы. По сути, функция веб-сада позволяет загружать запросы баланса на одном сервере с большей, чем на ядре. Таким образом, вам приходится иметь дело со всеми предостережениями, с которыми вы обычно сталкиваетесь в сценарии с балансировкой нагрузки, за исключением маршрутизации запросов.
Эрик Бурчам
@Coding Gorilla - продолжение ... Лучшая «причина», которую я нашел для использования функции нескольких рабочих процессов, заключается в повышении производительности. Проверьте эту ссылку: iis-aid.com/articles/performance_testing/… . Конечно, вам лучше знать, что вы делаете со всеми асинхронными аспектами программирования, которые мы часто забываем учитывать на веб-сайтах, поскольку большинство из них (по крайней мере, для начала) запускают один рабочий поток. Итак, короткий ответ на мой вопрос: попробуйте, если у вас проблемы с производительностью.
Эрик Бурчам
4

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

Ограничения памяти на самом деле являются лишь примитивными порогами безопасности, которые не позволяют сайту использовать все системные ресурсы. Обратите внимание, что это более потенциальная проблема в Windows 2008 R2 x64, чем в IIS 6.0 x86, поскольку приложения x86 имели естественный потолок памяти в 2 ГБ. В IIS 7.5 гораздо проще для приложения с утечкой памяти потреблять огромное количество памяти.

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

Грег Аскью
источник
Спасибо за указание на 32-битную шапку на память. Я не знаю, как я забываю эти вещи. Я также думаю, что правильный подход, если у вас есть приложение с дефектом, достаточным для сбоя пула приложений, - это исправить его, предполагая, что у вас есть доступ к коду. Я ценю совет!
Эрик Бурчам
Мы провели некоторое собственное тестирование. Кажется, что при запуске пула приложений накладные расходы составляют примерно 64 КБ на пул приложений, а не все приложения в одном пуле приложений. Это в течение 12 часов с использованием монитора производительности для мониторинга потребления памяти. Это было на 64-битном сервере. Я думаю, что если этот простой тест окажется правильным, то стоимость ресурсов одного пула приложений на приложение в основном незначительна для современного оборудования.
Эрик Бурчам