Параметры модели процесса для объекта processModel пула приложений <>
Общие сведения
С помощью <processModel>
элемента можно настроить многие функции безопасности, производительности, работоспособности и надежности пулов приложений в IIS 7 и более поздних версий. В их числе можно назвать следующие.
- Удостоверение пула приложений— имя службы или учетной записи пользователя, под которой выполняется рабочий процесс пула приложений. Это определяется атрибутом identityType . По умолчанию, начиная с IIS 7.5, пул приложений запускается под встроенной учетной записью ApplicationPoolIdentity , которая динамически создается службой активации процессов Windows (WAS). (В IIS 7.0 удостоверением по умолчанию была учетная запись NetworkService .) Вы можете изменить значение атрибута identityType на встроенную учетную запись NetworkService , учетную запись LocalService , встроенную учетную запись LocalSystem или пользовательскую учетную запись, которую вы создаете. Если вы выбираете пользовательскую учетную запись, определите учетные данные учетной записи, используя атрибуты userName и password . Однако имейте в виду, что учетные записи NetworkService, LocalService и LocalSystem имеют больше прав пользователя, чем учетная запись ApplicationPoolIdentity . (Предупреждение. Запуск пула приложений с использованием высокоуровневых прав пользователя представляет серьезную угрозу безопасности.) Кроме того, можно использовать атрибут logonType , чтобы указать, следует ли удостоверению процесса входить в систему как пакетный пользователь или служба. (Дополнительные сведения о типах входа см. в статье Функция LogonUser .)
- Веб-садоводство и использование оборудования NUMA, которое можно настроить, задав атрибут maxProcesses . Сведения о веб-садоводствах см. в разделе maxProcesses со значением больше единицы. Для использования оборудования NUMA присвойте параметру maxProcesses значение "0", чтобы указать, что СЛУЖБЫ IIS выполняют такое же количество рабочих процессов, что и узлы NUMA.
- Параметры времени ожидания простоя, которые позволяют указать, как долго рабочий процесс остается в состоянии простоя до завершения работы. Измените атрибут idleTimeout , чтобы настроить этот параметр.
- Мониторинг работоспособности путем включения проверки пингов по рабочему процессу, максимального времени, разрешенного рабочему процессу для реагирования на проверку проверки подлинности, и частоты ping-запросов, отправляемых рабочему процессу для отслеживания его работоспособности. Измените атрибуты pingingEnabled, pingInterval и pingResponseTime , чтобы настроить эти параметры.
- Ограничения времени завершения рабочего процесса и запуска. Первое ограничение устанавливается атрибутом shutdownTimeLimit и определяет интервал, который IIS 7 и более поздних версий предоставляет рабочему процессу, чтобы завершить все запросы до того, как служба WWW завершит рабочий процесс. Второе ограничение задается атрибутом startupTimeLimit и указывает время, в течение которого IIS 7 и более поздних версий позволяет запускать пул приложений.
Совместимость
Версия | Примечания |
---|---|
IIS 10.0 | Элемент <processModel> не был изменен в IIS 10.0. |
IIS 8,5 | Добавлен idleTimeoutAction атрибут , позволяющий завершить или приостановить рабочий процесс, который находится в состоянии простоя на протяжении idleTimeout всего атрибута, а не просто завершить работу. |
IIS 8,0 | Добавлен setProfileEnvironment атрибут , позволяющий задать среду на основе профиля пользователя для нового процесса. Для атрибута maxProcesses добавлены значения, включая поддержку неоднородного доступа к памяти (NUMA). Добавлен logEventOnProcessModel атрибут , чтобы указать, что действие, выполняемое в процессе, регистрируется в журнале. |
IIS 7,5 | Элемент <processModel> <add> элемента был обновлен в IIS 7.5, чтобы включить параметры, позволяющие запускать приложения с помощью нового ApplicationPoolIdentity , и указать тип входа для удостоверения процесса. |
IIS 7.0 | Элемент <processModel> появился в IIS 7.0. |
IIS 6,0 | Элемент <processModel> заменяет некоторые параметры в объекте метабазы IIS 6.0 IIsApplicationPools . |
Установка
Коллекция <applicationPools>
включена в установку iis 7 и более поздних версий по умолчанию.
Инструкции
Изменение параметров конфигурации модели процессов
Откройте диспетчер служб IIS:
Если вы используете Windows Server 2012 или Windows Server 2012 R2:
- На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
Если вы используете Windows 8 или Windows 8.1:
- Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
- Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
Если вы используете Windows Server 2008 или Windows Server 2008 R2:
- На панели задач нажмите кнопку Пуск, наведите указатель на пункт Администрирование, а затем выберите Пункт Диспетчер служб IIS.
Если вы используете Windows Vista или Windows 7:
- На панели задач нажмите кнопку Пуск, а затем панель управления.
- Дважды щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
В области Подключения разверните имя сервера, щелкните Пулы приложений и выберите пул приложений, который требуется изменить.
В области Действия щелкните Дополнительные параметры...
В диалоговом окне Дополнительные параметры щелкните свойство модели процесса, которое требуется изменить, а затем измените его в разделе значения свойства диалогового окна, а затем нажмите кнопку ОК. Например, измените ограничения времени завершения работы (в секундах) и Ограничения времени запуска (в секундах) на 30.
Настройка СЛУЖБ IIS для использования с оборудованием NUMA
Откройте диспетчер служб IIS:
Если вы используете Windows Server 2012 или более поздней версии:
- На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
Если вы используете Windows 8 или более поздней версии:
- Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
- Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
В области Подключения разверните имя сервера и щелкните Пулы приложений.
В области Пулы приложений выберите пул, который вы хотите настроить для NUMA.
В области Действия выберите Дополнительные параметры.
В области Модель процесса задайте для параметра Максимальное число рабочих процессов значение
0
.
Настройка действия времени ожидания простоя
Откройте диспетчер служб IIS:
Если вы используете Windows Server 2012 R2:
- На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
Если вы используете Windows 8.1:
- Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
- Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
В области Подключения дважды щелкните имя сервера, дважды щелкните Пулы приложений, а затем выберите пул приложений для настройки.
В области Действия щелкните Дополнительные параметры.
В разделе Модель процесса диалогового окна Дополнительные параметры для параметра idleTimeoutAction выберите Завершить или Приостановить.
Нажмите кнопку ОК.
Конфигурация
Элемент настраивается <processModel>
на уровне сервера в файле ApplicationHost.config.
Атрибуты
Атрибут | Описание | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
identityType |
Необязательный атрибут перечисления. Указывает удостоверение учетной записи, под которой выполняется пул приложений. Примечание: Начиная с IIS 7.5 значением по умолчанию является ApplicationPoolIdentity. (В IIS 7.0 значением по умолчанию было NetworkService .)Атрибут identityType может быть одним из следующих возможных значений. Значение по умолчанию — NetworkService .
|
||||||||||||
idleTimeout |
Необязательный атрибут timeSpan. Указывает, как долго (в минутах) рабочий процесс должен выполняться в режиме простоя, если новые запросы не получены и рабочий процесс не обрабатывает запросы. По истечении выделенного времени рабочий процесс должен запросить его завершение службой WWW. Значение по умолчанию — 00:20:00 . Чтобы отключить функцию тайм-аута простоя, присвойте этому значению значение 00:00:00 . |
||||||||||||
idleTimeoutAction |
Необязательный атрибут перечисления. Указывает действие, которое необходимо выполнить при достижении времени ожидания простоя. До iis 8.5 рабочий процесс, который был бездействующим в течение атрибута idleTimeout , будет завершен. После iis 8.5 вы можете завершать рабочий процесс, который достигает idleTimeout предела, или приостановить его, переместив его из памяти на диск. Приостановка процесса, скорее всего, займет меньше времени и потребляет меньше памяти, чем его прекращение.Вы можете настроить действие приостановки бездействия с помощью фиктивного запроса инициализации приложения (см. раздел applicationInitialization .Атрибут idleTimeoutAction может иметь следующие возможные значения. Значение по умолчанию — Terminate .
|
||||||||||||
loadUserProfile |
Дополнительный логический атрибут. Указывает, загружает ли СЛУЖБА IIS профиль пользователя для удостоверения пула приложений. Установка этого значения false приводит к тому, что службы IIS отменить изменения на поведение IIS 6.0. IIS 6.0 не загружает профиль пользователя для удостоверения пула приложений. Значение по умолчанию — false . |
||||||||||||
logEventOnProcessModel |
Необязательный атрибут flags. Указывает, какое действие, выполненное в процессе, регистрируется в Просмотр событий. В IIS 8.0 применяется только действие времени ожидания простоя, в котором процесс завершается, так как он был бездействующим для периода idleTimeout. Имя флага IdleTimeout равно . Значение — 1 .Значение по умолчанию — IdleTimeout . |
||||||||||||
logonType |
Необязательный атрибут перечисления. Указывает тип входа для удостоверения процесса. (Дополнительные сведения о типах входа см. в статье Функция LogonUser .) Примечание: Этот атрибут появился в IIS 7.5. Атрибут logonType может иметь одно из следующих возможных значений; значение по умолчанию — LogonBatch .
|
||||||||||||
manualGroupMembership |
Дополнительный логический атрибут. Указывает, добавляется ли идентификатор безопасности (SID) группы IIS_IUSRS в маркер рабочего процесса. Если задано значение false, службы IIS автоматически используют удостоверение пула приложений, как если бы оно было членом встроенной группы IIS_IUSRS, которая имеет доступ к необходимым файловым и системным ресурсам. При значении true удостоверение пула приложений должно быть явно добавлено ко всем ресурсам, которые требуются рабочему процессу во время выполнения. Значение по умолчанию — false . |
||||||||||||
maxProcesses |
Необязательный атрибут uint. Указывает максимальное количество рабочих процессов, которые будут использоваться для пула приложений.
1 . |
||||||||||||
password |
Необязательный строковый атрибут. Указывает пароль, связанный с атрибутом userName . Этот атрибут необходим, только если параметр identityType имеет значение SpecificUser. Примечание: Чтобы избежать сохранения незашифрованных строк паролей в файлах конфигурации, всегда используйте AppCmd.exe или диспетчер IIS для ввода паролей. При использовании этих средств управления строки паролей будут зашифрованы автоматически перед записью в XML-файлы конфигурации. Это обеспечивает лучшую защиту паролей, чем хранение незашифрованных паролей. |
||||||||||||
pingingEnabled |
Дополнительный логический атрибут. Указывает, включена ли проверка проверки связь для рабочего процесса. Значение по умолчанию — true . |
||||||||||||
pingInterval |
Необязательный атрибут timeSpan. Указывает время между проверками связи мониторинга работоспособности, которые служба WWW отправляет рабочему процессу. Значение по умолчанию — 00:00:30 (30 секунд). |
||||||||||||
pingResponseTime |
Необязательный атрибут timeSpan. Указывает время, когда рабочий процесс получает ответ на проверку проверки работоспособности. После превышения предельного времени служба WWW завершает рабочий процесс. Значение по умолчанию — 00:01:30 (1 минута 30 секунд). |
||||||||||||
requestQueueDelegatorIdentity |
Необязательный атрибут String. Указывает удостоверение учетной записи, которое имеет разрешение на делегирование HTTP-запросов в пул приложений. Примечание. Этот атрибут недоступен в пользовательском интерфейсе диспетчера служб IIS. |
||||||||||||
setProfileEnvironment |
Дополнительный логический атрибут. Если setProfileEnvironment имеет значение True , WAS создает блок среды для передачи в CreateProcessAsUser при создании рабочего процесса. Это гарантирует, что среда будет настроена на основе профиля пользователя для нового процесса.Значение по умолчанию — True . |
||||||||||||
shutdownTimeLimit |
Необязательный атрибут timeSpan. Указывает время ожидания службы W3SVC после инициации перезапуска. Если рабочий процесс не завершает работу в пределах shutdownTimeLimit, он будет завершен службой W3SVC. Значение по умолчанию — 00:01:30 (1 минута 30 секунд). |
||||||||||||
startupTimeLimit |
Необязательный атрибут timeSpan. Указывает время ожидания iis для запуска пула приложений. Если пул приложений не запускается в startupTimeLimit, рабочий процесс завершается и увеличивается число защиты от быстрого сбоя. Значение по умолчанию — 00:01:30 (1 минута 30 секунд). |
||||||||||||
userName |
Необязательный строковый атрибут. Указывает удостоверение, под которым выполняется пул приложений, если identityType имеет значение SpecificUser. |
Дочерние элементы
Отсутствует.
Образец конфигурации
В следующем примере конфигурации используется элемент пула <add>
приложений для создания нового пула приложений с именем Contoso. Элемент <recycling>
настраивает ведение журнала для перезапусков пула приложений, <periodicRestart>
элемент настраивает при перезапуске пула приложений, а <processModel>
элемент настраивает атрибуты shutdownTimeLimit и startupTimeLimit для завершения и запуска рабочих процессов в пуле приложений в течение 30 секунд каждый. При превышении этих временных ограничений службы IIS завершают рабочий процесс.
<add name="Contoso">
<recycling logEventOnRecycle="Schedule">
<periodicRestart>
<schedule>
<clear />
<add value="03:00:00" />
</schedule>
</periodicRestart>
</recycling>
<processModel identityType="NetworkService" shutdownTimeLimit="00:00:30" startupTimeLimit="00:00:30" />
</add>
Пример кода
В следующих примерах значения свойств processModel.shutdownTimeLimit и processModule.startupTimeLimit изменяются на 30 секунд для пула приложений с именем Contoso.
AppCmd.exe
appcmd.exe set apppool "Contoso" /processModel.shutdownTimeLimit:00:00:30
appcmd.exe set apppool "Contoso" /processModel.startupTimeLimit:00:00:30
Можно также использовать следующий синтаксис:
appcmd.exe set config -section:system.applicationHost/applicationPools /[name='Contoso'].processModel.shutdownTimeLimit:"00:00:30" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /[name='Contoso'].processModel.startupTimeLimit:"00:00:30" /commit:apphost
Примечание
При использовании AppCmd.exe для настройки этих параметров для параметра apphost
фиксации необходимо задать значение . Это зафиксирует параметры конфигурации в соответствующем разделе расположения в файле ApplicationHost.config.
C#
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample
{
private static void Main()
{
using (ServerManager serverManager = new ServerManager())
{
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection applicationPoolsSection = config.GetSection("system.applicationHost/applicationPools");
ConfigurationElementCollection applicationPoolsCollection = applicationPoolsSection.GetCollection();
ConfigurationElement addElement = FindElement(applicationPoolsCollection, "add", "name", @"Contoso");
if (addElement == null) throw new InvalidOperationException("Element not found!");
ConfigurationElement processModelElement = addElement.GetChildElement("processModel");
processModelElement["shutdownTimeLimit"] = TimeSpan.Parse("00:00:30");
processModelElement["startupTimeLimit"] = TimeSpan.Parse("00:00:30");
serverManager.CommitChanges();
}
}
private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
{
foreach (ConfigurationElement element in collection)
{
if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
{
bool matches = true;
for (int i = 0; i < keyValues.Length; i += 2)
{
object o = element.GetAttributeValue(keyValues[i]);
string value = null;
if (o != null)
{
value = o.ToString();
}
if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
{
matches = false;
break;
}
}
if (matches)
{
return element;
}
}
}
return null;
}
}
VB.NET
Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample
Sub Main()
Dim serverManager As ServerManager = New ServerManager
Dim config As Configuration = serverManager.GetApplicationHostConfiguration
Dim applicationPoolsSection As ConfigurationSection = config.GetSection("system.applicationHost/applicationPools")
Dim applicationPoolsCollection As ConfigurationElementCollection = applicationPoolsSection.GetCollection
Dim addElement As ConfigurationElement = FindElement(applicationPoolsCollection, "add", "name", "Contoso")
If (addElement Is Nothing) Then
Throw New InvalidOperationException("Element not found!")
End If
Dim processModelElement As ConfigurationElement = addElement.GetChildElement("processModel")
processModelElement("shutdownTimeLimit") = TimeSpan.Parse("00:00:30")
processModelElement("startupTimeLimit") = TimeSpan.Parse("00:00:30")
serverManager.CommitChanges()
End Sub
Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
For Each element As ConfigurationElement In collection
If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
Dim matches As Boolean = True
Dim i As Integer
For i = 0 To keyValues.Length - 1 Step 2
Dim o As Object = element.GetAttributeValue(keyValues(i))
Dim value As String = Nothing
If (Not (o) Is Nothing) Then
value = o.ToString
End If
If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
matches = False
Exit For
End If
Next
If matches Then
Return element
End If
End If
Next
Return Nothing
End Function
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools", "MACHINE/WEBROOT/APPHOST");
var applicationPoolsCollection = applicationPoolsSection.Collection;
var addElementPos = FindElement(applicationPoolsCollection, "add", ["name", "Contoso"]);
if (addElementPos == -1) throw "Element not found!";
var addElement = applicationPoolsCollection.Item(addElementPos);
var processModelElement = addElement.ChildElements.Item("processModel");
processModelElement.Properties.Item("shutdownTimeLimit").Value = "00:00:30";
processModelElement.Properties.Item("startupTimeLimit").Value = "00:00:30";
adminManager.CommitChanges();
function FindElement(collection, elementTagName, valuesToMatch) {
for (var i = 0; i < collection.Count; i++) {
var element = collection.Item(i);
if (element.Name == elementTagName) {
var matches = true;
for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
var property = element.GetPropertyByName(valuesToMatch[iVal]);
var value = property.Value;
if (value != null) {
value = value.toString();
}
if (value != valuesToMatch[iVal + 1]) {
matches = false;
break;
}
}
if (matches) {
return i;
}
}
}
return -1;
}
VBScript
Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools", "MACHINE/WEBROOT/APPHOST")
Set applicationPoolsCollection = applicationPoolsSection.Collection
addElementPos = FindElement(applicationPoolsCollection, "add", Array("name", "Contoso"))
If siteElementPos = -1 Then
WScript.Echo "Element not found!"
WScript.Quit
End If
Set addElement = applicationPoolsCollection.Item(addElementPos)
Set processModelElement = addElement.ChildElements.Item("processModel")
processModelElement.Properties.Item("shutdownTimeLimit").Value = "00:00:30"
processModelElement.Properties.Item("startupTimeLimit").Value = "00:00:30"
adminManager.CommitChanges()
Function FindElement(collection, elementTagName, valuesToMatch)
For i = 0 To CInt(collection.Count) - 1
Set element = collection.Item(i)
If element.Name = elementTagName Then
matches = True
For iVal = 0 To UBound(valuesToMatch) Step 2
Set property = element.GetPropertyByName(valuesToMatch(iVal))
value = property.Value
If Not IsNull(value) Then
value = CStr(value)
End If
If Not value = CStr(valuesToMatch(iVal + 1)) Then
matches = False
Exit For
End If
Next
If matches Then
Exit For
End If
End If
Next
If matches Then
FindElement = i
Else
FindElement = -1
End If
End Function