Intro to Application Pools in IIS

Jeremy Morgan 
Jul 9, 2016 — clock
Last Update: Dec 23, 2022
I just became an AWS Certified Cloud Practitioner. You can too by taking the same excellent training I took.
If you want to learn IIS you can go from beginner to expert with my courses in the IIS Skill Path. Check it out!
I cover this and other IIS Administration topics in my IIS Administration Fundamentals course at Pluralsight. Check it out!
What Is an Application Pool?
To understand Application Pools, we must first understand applications, as far as IIS is concerned.
An application is a set of files and folders that deliver content. Any website will have a default application assigned to it, even if it’s just HTML and images. The diagram below shows the web server / web site / application relationship:

An Application Pool is a container for your applications. It serves to isolate your application from other applications on the server. Each application in an application pool shares a worker process (w3wp.exe). You can have several applications share the same worker process, or have one for each application.

When setting up Application Pools, you have a few options. Let’s compare a couple patterns.
Multiple Applications in Single Pool

With this setup every application shares the same pool/process. Some reasons you may want to do this:
- Simpler Design
- When making changes you only have to do it once.
- Caching is improved, code can be shared and cached between applications
Some reasons you may not want to:
- One crash takes down every application
- An application with high load will slow the others
- All applications share the same security profile
- One applications required setting may break another application.
Each application has its own application pool

With this setup each application has it’s own unique process.
Some reasons you may want to do this:
- Isolated operations — if one application fails it doesn’t affect the others.
- Isolated performance — a higher load application (most likely) will not slow the other applications down.
- Security can be configured for each application individually.
Some reasons you may not want to do this:
- Settings cannot be changed globally, must do one by one.
- Common code caching advantage not present.
- Could create more overhead than a single pool.
There is no “magic bullet” for this, it will depend on your website and the needs of your organization. It’s definitely something you want to experiment with for best results.
Application Pool Settings
There are some important settings to consider with Application Pools. If you choose the basic settings you don’t get much:

This only allows you to change your CLR version and Managed pipeline mode. But choose advanced settings and you get far more options:

Here are some ones I’ve often seen changed:
.Net CLR— Although there isn’t a great reason to run a lower version of .Net it does happen. Usually I find myself setting this when the default app pool framework is 2.0.
Enable 32 Bit applications — This is a common one for backwards compatibility. For instance the last application I worked on that required this used 32 bit DLLs written in C++, and the application would not function without this setting.
Managed Pipeline Mode — This is another one used for backwards compatibility. You may need classic mode for some older ASP applications.
Queue Length — this is a throttling setting and it’s pretty rough but useful. What we’re saying here is we can have 1000 requests in the queue, and above that visitors will get a 503 error.
Limit — This is another throttling measure that controls the maximum percentage of CPU time you want this application pool to consume.
Limit Action specifies what to do when that limit is hit. You can kill the process, throttle it, or do nothing.
Limit interval is for fine tuning throttling. After the limit above is hit, this setting controls how many minutes we can stay in that state until recycling. If it’s too long you may have throttling on after it’s no longer needed. Too short and of an interval will just keep it throttling.
Identity — This is important because this is the user your application pool is impersonating. Most of the time application pool identity is your best choice, but there are times when you will need a specific user to run a process. In that case you can have this app pool run under that user’s account and it’s given their permissions. Don’t do this unless you absolutely need to. It’s something I’ve seen a lot in the field especially in high security applications.
As I’ve said before, there is no silver bullet for tuning either. It really depends on your organization and how your website is used. A great tune on one website could be bad for another.
How to Create an Application Pool
Creating Application Pools in IIS is easy. You can go into IIS Manager in the Application Pools feature pane, right click and create a new one:

Or you could create one with PowerShell (my preferred option):
In this script you can see that I define a name for my Application Pool. Then, I test to see if it already exists. If it doesn’t I create a new Application pool. Then I use Set-ItemProperty to change my runtime version to 4.0. You can set any of the application pool settings this way.
To see the options you can change type the following at a PowerShell prompt:
Replace DefaultAppPool with the name of your application pool if it’s different.
Conclusion
I hope this has given you a good introduction to application pools in IIS. Because these are created automatically often times administrators don’t give a lot of thought to setting them up. Many websites run just fine with default settings. If you find yourself needing a custom configuration or you have some load issues, you now have a good understand of application pools and where to look to change them.
I cover this and many more IIS topics in my new Pluralsight Course IIS Administration Fundamentals. Check it out if you’re interested in learning more about IIS Administration.
Published: Jul 9, 2016 by Jeremy Morgan. Contact me before republishing this content.
Управление веб-сайтом

После развертывания сайтом можно управлять с применением средств IIS. Ниже рассматриваются наиболее полезные опции конфигурирования и способы их использования.
Создание нового сайта
IIS 8 может поддерживать множество сайтов на одном сервере. В рассмотренных примерах развертывания содержимое добавлялось к сайту по умолчанию, а в этом разделе будет показано, как создать совершенно новый сайт. Разверните древовидное представление в IIS Manager, щелкните правой кнопкой мыши на узле Sites (Сайты) и в контекстном меню выберите пункт Add Web Site. (Добавить веб-сайт. ). Откроется диалоговое окно Add Web Site, показанное на рисунке ниже:

Поле Site name (Имя сайта) должно содержать что-нибудь значащее. Оно используется для идентификации сайта в среде IIS Manager, но не влияет на содержимое сайта. В этом примере пул приложений был оставлен без изменений (пулы приложений рассматриваются далее). Поле Physical path (Физический путь) определяет местоположение, в котором IIS 8 будет искать содержимое для запросов на обслуживание, адресованных новому сайту. В этом примере на сервере был создан новый каталог D:\WebSites. Кнопки Connect as. (Подкл. как. ) и Test Settings. (Тест настроек. ) позволяют указать другие учетные данные пользователя для доступа к содержимому сайта.
Раздел Bindings (Привязка) позволяет указать, как IIS 8 будет прослушивать запросы, поступающие от клиентов. IIS 8 поддерживает множество протоколов, но мы сосредоточим внимание на HTTP, поскольку он используется наиболее широко. Для этого в списке Type (Тип) выберем опцию http.
Меню IP address (IP-адрес) позволяет выбрать сетевой интерфейс, который сервер будет прослушивать на предмет запросов. Для этого параметра было оставлено значение All Unassigned (Все неназначенные) — т.е. IIS будет прослушивать все интерфейсы за исключением тех, где другой сайт должен обслуживаться через этот же порт TCP. Значение Port (Порт) позволяет указать порт TCP, на котором IIS 8 будет прослушивать запросы клиентов. В общем случае каждый сайт должен обслуживаться через уникальный порт, поэтому, во избежание конфликтов с подключенным к порту 80 веб-сайтом по умолчанию, мы выбрали порт 8091.
Кроме того, отмечен флажок Start Web site immediately (Запустить веб-сайт сейчас) — т.е. сразу после щелчка на кнопке ОК сервер IIS создаст веб-сайт и начнет прослушивать запросы. Больше конфигурировать нечего, поэтому щелкните на кнопке OK, чтобы создать и запустить веб-сайт. Каждый из рассмотренных в предыдущей статье вариантов развертывания позволяет указывать сайт для развертывания — помните, что при развертывании сайты различаются по именам и используют указанные номера портов.
Создание виртуальных каталогов
При установке места назначения для примеров веб-сайтов содержимое помещается в каталог, в котором IIS 8 ищет содержимое по умолчанию. Но содержимое можно было бы разместить где-то в другом месте, а затем использовать виртуальный каталог для ссылок на него. Чтобы продемонстрировать этот подход, создадим на сервере новый каталог и скопируем в него содержимое сайта. Путь к новому каталогу выглядит следующим образом:
Чтобы связать новый каталог с IIS, откройте IIS Manager, разверните древовидное представление, щелкните правой кнопкой мыши на элементе Default Web Site и в контекстном меню выберите пункт Add Virtual Directory (Добавить виртуальный каталог). В результате откроется диалоговое окно Add Virtual Directory (Добавление виртуального каталога), показанное на рисунке ниже:

В поле Alias (Псевдоним) введите virtual. Для пути был выбран корневой каталог веб-сайта по умолчанию — т.е. любое имя, введенное в поле Alias (Псевдоним), будет добавляться в URL-адрес непосредственно после имени сервера. В поле Physical path (Физический путь) введите путь к одному из созданных ранее каталогов развертывания. Щелкните на кнопке OK, чтобы создать виртуальный каталог.
Чтобы протестировать его, откройте браузер на сервере и направьте его на URL-адрес http://localhost/virtual. Как и ранее, откроется созданный нами простой веб-сайт, но на этот раз содержимое будет извлекаться из нового каталога, а доступ к нему будет осуществляться с помощью указанного специального URL-адреса.
Использование пулов приложений
Пулы приложений позволяют для упрощения конфигурирования и управления группировать вместе аналогичные или связанные приложения. При этом приложения, которые включены в пулы приложений, изолируются, в результате чего проблемы, возникающие в одном пуле, не оказывают влияния на приложения из других пулов.
Не существует никаких жестких и кратких правил назначения приложений в пулы. Приложения можно группировать по принципу схожести профилей рабочих характеристик, принадлежности одному подразделению или по любому другому принципу, оправданному в конкретной среде. Как будет показано, одним из наиболее полезных средств является возможность наличия различных пулов приложений, которые используют различные версии .NET Framework. В этом разделе мы рассмотрим, как создавать, конфигурировать и назначать приложения в пулы приложений.
IIS 8 автоматически создает набор пулов приложений, в том числе пул, используемый по умолчанию при создании нового приложения. Просматривать и управлять пулами приложений можно с помощью IIS Manager — для этого достаточно развернуть элемент сервера в древовидном представлении и щелкнуть на элементе Application Pools (Пулы приложений). В результате отобразятся пулы, определенные на сервере. Пулы, определенные на нашем компьютере показаны на рисунке ниже:

Пулы приложений перечислены в таблице в середине экрана. Столбцы этой таблицы содержат наиболее важные характеристики пулов, описанные в таблице ниже. При развертывании приложения оно назначается в пул приложений, используемый по умолчанию. При развертывании приложения в предшествующих примерах настройки пула приложений по умолчанию были изменены так, чтобы он использовал .NET 4.
Определяет имя пула приложений. После того как пул создан, его имя изменить нельзя
Этот столбец показывает, выполняется ли пул приложений — т.е. будет ли генерироваться ответ на запросы к приложениям, назначенным в пул. Подробнее это описано в разделе «Запуск и останов пула приложений»
Версия .NET Framework, которая будет использоваться для выполнения управляемого кода — в примерах развертывания эта настройка пула приложений по умолчанию была изменена. Более подробно указание версий платформы описано в разделе «Использование параллельного выполнения»
IIS 8 поддерживает два режима конвейера для обработки запросов — Integrated (Встроенный) и Classic (Классический). Расширение конвейера подробнее рассматривается в следующей статье
Учетная запись Windows, используемая для запуска приложений пула
Количество приложений, назначенных в пул; на рисунке выше видно, что пул DefaultAppPool содержит три приложения
Создание нового пула приложений
Нестандартный пул приложений можно создать, щелкнув на действии Add Application Pool (Добавить пул приложений) в правой части экрана IIS Manager. Откроется диалоговое окно Add Application Pool (Добавление пула приложений), показанное на рисунке ниже:

Введите имя нового пула (в примере использовано имя CustomAppPool), выберите версию .NET Framework, которая будет применяться для запуска приложений, назначенных в пул, и требуемый режим управляемого конвейера (режим Classic (Классический) предназначен для унаследованных приложений; если уверенности нет, выберите режим Integrated (Встроенный)).
Щелкните на кнопке OK, и новый пул будет создан и добавлен в список IIS Manager. Щелчок на действии Advanced Settings. (Дополнительные параметры) позволит сконфигурировать детали, связанные с пулом.
Назначение приложения в пул приложений
Чтобы назначить приложение в пул приложений, выберите приложение в окне IIS Manager и щелкните на действии Basic Settings (Основные настройки) в правой части экрана. Откроется диалоговое окно Edit Application (Изменение приложения). Щелкните на кнопке Select (Выбрать) и выберите пул приложений из раскрывающегося списка, как показано на рисунке ниже. Мы выбрали специальный пул приложений, созданный в предыдущем разделе:

Щелкните на кнопке OK. Щелкните на элементе Application Pools в IIS Manager — количество приложений пула CustomAppPool в столбце Applications станет равным 1, а количество приложений пула DefaultAppPool уменьшится на единицу.
Запуск и останов пула приложений
После щелчка на пуле приложений в правой части окна IIS Manager в разделе Application Pool Tasks (Задачи пула приложений) отобразятся три действия. Действия Start (Начало) и Stop (Остановить) определяют то, обслуживаются ли запросы, адресованные назначенным в пул приложениям. Если пул остановлен, клиенты будут получать сообщение об ошибке. Действие Recycle (Перезапуск) переустанавливает пул приложений. Это полезно для устранения постепенно накапливающихся и трудных для диагностирования проблем.
Использование параллельного выполнения
Пулы приложений позволяют на одном сервере запускать приложения, которые требуют различных версий ASP.NET. При использовании унаследованных приложений или постепенной модернизации приложений до ASP.NET 4 можно формировать различные пулы приложений для обеспечения того, чтобы каждое приложение работало с требуемыми функциональными средствами.
В примерах развертывания сайтов отображалась версия .NET Framework, применяемая для обработки запросов — как раз на такой случай. Если изменить версию платформы, предназначенную для пула, на ту, что назначена одному из примеров развертывания, выходные сведения изменятся, указывая, какая платформа используется пулом.
Если хотите изменить версию .NET, применяемую для сайта, который был создан с помощью проекта Visual Studio, придется изменить настройки проекта, чтобы он использовал эту версию, и снова выполнить развертывание. В противном случае при выполнении запросов к сайту будет отображаться сообщение об ошибке.
What is an IIS application pool?
What exactly is an application pool? What is its purpose?
15 Answers 15
Application pools allow you to isolate your applications from one another, even if they are running on the same server. This way, if there is an error in one app, it won’t take down other applications.
Additionally, applications pools allow you to separate different apps which require different levels of security.
![]()
I second the top voted answer, but feel like adding little more details here if anyone finds it useful.
Application Pools¶
When hosting multiple web sites on a single server, you should consider isolating the applications from each other by running each application in its own application pool. This document provides an overview of how to set up Application Pools to securely host multiple web sites on a single server.
Application Pool Identity Account¶
An application pool identity account allows you to run an application under a unique account without having to create and manage domains or local accounts. On IIS 8.0+ the IIS Admin Worker Process (WAS) will create a virtual account with the name of the new application pool and run the application pool’s worker processes under this account by default.
Configuring IIS Application Pool Identities¶
In the IIS Management Console, under Advanced Settings for your application pool ensure that Identity list item is set to use ApplicationPoolIdentity as shown in the image below.

Securing Resources¶
The IIS management process creates a secure identifier with the name of the application pool in the Windows Security System. Resources can be secured by using this identity, however this identity is not a real user account and will not show up in the Windows User Management Console.
To grant the IIS worker process access to your application, you will need to modify the Access Control List (ACL) for the the directory containing your application.
- Open Windows Explorer and navigate to the directory.
- Right click on the directory and click properties.
- Under the Security tab, click the Edit button and then the Add button
- Click the Locations and make sure you select your server.
- Enter IIS AppPool\DefaultAppPool in Enter the object names to select textbox.
- Click the Check Names button and then click OK.
You can also do this via the command-line by using ICACLS tool.