Configurações de modelo de processo para um pool de aplicativos <processModel>
Visão geral
Usando o elemento <processModel>
, você pode configurar muitos dos recursos de segurança, desempenho, integridade e confiabilidade dos pools de aplicativos no IIS 7 e posteriores. Isso inclui os seguintes recursos:
- Identidade do pool de aplicativos, que é o nome do serviço ou da conta de usuário na qual o processo de trabalho do pool de aplicativos é executado. Isso é definido pelo atributo identityType. Por padrão, a partir do IIS 7.5, um pool de aplicativos é executado na conta interna ApplicationPoolIdentity, que é criada dinamicamente pelo WAS (Serviço de Ativação de Processos do Windows). (No IIS 7.0, a identidade padrão era a conta NetworkService.) Você pode alterar o valor do atributo identityType para a conta interna NetworkService, a conta LocalService, a conta interna LocalSystem ou uma conta personalizada que você criar. Se você escolher uma conta personalizada, defina as credenciais da conta usando os atributos userName e password. No entanto, lembre-se de que as contas NetworkService, LocalService e LocalSystem têm mais direitos de usuário do que a conta ApplicationPoolIdentity. (Aviso: é um sério risco de segurança executar um pool de aplicativos usando direitos de usuário de alto nível.) Além disso, você pode usar o atributo logonType para especificar se a identidade do processo deve fazer logon como um usuário ou serviço em lote. (Para obter informações adicionais sobre tipos de logon, consulte o artigo Função LogonUser.)
- A jardinagem da Web e uso do hardware NUMA (acesso não uniforme à memória), que você pode configurar definindo o atributo maxProcesses. Para jardinagem da Web, consulte maxProcesses para um valor maior que um. Para usar o hardware NUMA, defina maxProcesses como um valor de "0" para especificar que o IIS executa o mesmo número de processos de trabalho que há nós do NUMA.
- Configurações de tempo limite ocioso, que permitem definir por quanto tempo um processo de trabalho permanece ocioso antes de ser desligado. Edite o atributo idleTimeout para configurar essa definição.
- Monitoramento de integridade habilitando pings no processo de trabalho, o tempo máximo permitido para um processo de trabalho responder a um ping e a frequência de pings enviados a um processo de trabalho para monitorar sua integridade. Edite os atributos pingingEnabled, pingInterval e pingResponseTime para definir essas definições.
- Limites de tempo de inicialização e desligamento do processo de trabalho. O primeiro limite é definido pelo atributo shutdownTimeLimit e determina o intervalo que o IIS 7 e posteriores fornece a um processo de trabalho para concluir todas as solicitações antes que o serviço WWW encerre o processo de trabalho. O segundo limite é definido pelo atributo startupTimeLimit e especifica a quantidade de tempo que o IIS 7 e posteriores permitem que um pool de aplicativos seja iniciado.
Compatibilidade
Versão | Observações |
---|---|
IIS 10.0 | O elemento <processModel> não foi modificado no IIS 10.0. |
IIS 8.5 | O atributo idleTimeoutAction foi adicionado habilitando um processo de trabalho que está ocioso pela duração do atributo idleTimeout a ser encerrado ou suspenso, não apenas encerrado. |
IIS 8.0 | O atributo setProfileEnvironment foi adicionado permitindo que o ambiente fosse definido com base no perfil do usuário para um novo processo. Foram adicionados valores para o atributo maxProcesses , incluindo suporte para NUMA (acesso não uniforme à memória). O atributo logEventOnProcessModel foi adicionado para especificar que a ação executada no processo é registrada em log. |
IIS 7.5 | O elemento <processModel> do elemento <add> foi atualizado no IIS 7.5 para incluir configurações que permitem executar aplicativos usando a nova ApplicationPoolIdentity e especificar o tipo de logon para a identidade de processo. |
IIS 7.0 | O elemento <processModel> foi introduzido no IIS 7.0. |
IIS 6,0 | O elemento <processModel> substitui algumas das configurações no objeto metabase IIsApplicationPools do IIS 6.0. |
Instalação
A coleção <applicationPools>
está incluída na instalação padrão do IIS 7 e posteriores.
Instruções
Como editar as configurações do modelo de processo
Abra o Gerenciador dos Serviços de Informações da Internet (IIS):
Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:
- Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
Se você estiver usando o Windows 8 ou Windows 8.1:
- Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
- Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:
- Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador dos Serviços de Informações da Internet (IIS).
Se você estiver usando o Windows Vista ou Windows 7:
- Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
- Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
No painel Conexões, expanda o nome do servidor e clique em Pools de Aplicativos e no pool de aplicativos que deseja editar.
No painel Ações, clique em Configurações Avançadas...
Na caixa de diálogo Configurações Avançadas, clique na propriedade do modelo de processo que deseja editar, edite-a na seção de valor da propriedade da caixa de diálogo e clique em OK. Por exemplo, altere o limite de tempo de desligamento (segundos) e os limites de tempo de inicialização (segundos) para 30.
Como configurar o IIS para uso com o hardware NUMA (acesso não uniforme à memória)
Abra o Gerenciador dos Serviços de Informações da Internet (IIS):
Se você estiver usando o Windows Server 2012 ou posterior:
- Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
Se você estiver usando o Windows 8 ou versões posteriores:
- Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
- Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
No painel Conexões, expanda o nome do servidor e clique em Pools de Aplicativos.
No painel Pools de Aplicativos, selecione o pool que deseja configurar para NUMA.
No painel Ações, selecione Configurações Avançadas.
No painel Modelo de Processo, defina o Máximo de Processos de Trabalho como
0
.
Como configurar a ação de tempo limite ocioso
Abra o Gerenciador dos Serviços de Informações da Internet (IIS):
Se você estiver usando o Windows Server 2012 R2:
- Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
Se você estiver usando o Windows 8.1:
- Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
- Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
No painel Conexões, clique duas vezes no nome do servidor, clique duas vezes em Pools de Aplicativos e, em seguida, selecione o pool de aplicativos a ser configurado.
No painel Ações, clique em Configurações Avançadas.
Na seção Modelo de Processo da caixa de diálogo Configurações Avançadas, para idleTimeoutAction, selecione Encerrar ou Suspender.
Clique em OK.
Configuração
Você configura o elemento <processModel>
no nível do servidor no arquivo ApplicationHost.config.
Atributos
Atributo | Descrição | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
identityType |
Atributo de enumeração opcional. Especifica a identidade da conta na qual o pool de aplicativos é executado. Observação: a partir do IIS 7.5, o valor padrão é ApplicationPoolIdentity. (No IIS 7.0, o valor padrão era NetworkService .)O atributo identityType pode ser um dos seguintes valores possíveis; o padrão é NetworkService .
|
||||||||||||
idleTimeout |
Atributo timeSpan opcional. Especifica por quanto tempo (em minutos) um processo de trabalho deve ser executado ocioso se nenhuma solicitação nova for recebida e o processo de trabalho não estiver processando solicitações. Depois que o tempo alocado for aprovado, o processo de trabalho deverá solicitar que ele seja desligado pelo serviço WWW. O valor padrão é 00:20:00 . Para desabilitar o recurso de tempo limite ocioso, defina esse valor como 00:00:00 . |
||||||||||||
idleTimeoutAction |
Atributo de enumeração opcional. Especifica a ação a ser executada quando a duração do tempo limite ocioso for atingida. Antes do IIS 8.5, um processo de trabalho que estivesse ocioso durante a duração do atributo idleTimeout era encerrado. Após o IIS 8.5, você tem a opção de encerrar um processo de trabalho que atinge o limite idleTimeout ou suspendê-lo movendo-o da memória para o disco. Suspender um processo provavelmente levará menos tempo e consumirá menos memória do que encerrá-lo.Você pode configurar uma ação de tempo limite ocioso de suspensão com a solicitação falsa de inicialização do aplicativo (consulte applicationInitialization .O atributo idleTimeoutAction pode ter os seguintes possíveis valores. O valor padrão é Terminate .
|
||||||||||||
loadUserProfile |
Atributo booliano opcional. Especifica se o IIS carrega o perfil do usuário para a identidade do pool de aplicativos. Definir esse valor como false faz com que o IIS reverta para o comportamento do IIS 6.0. O IIS 6.0 não carrega o perfil do usuário para uma identidade do pool de aplicativos. O valor padrão é false . |
||||||||||||
logEventOnProcessModel |
Atributo de sinalizadores opcionais. Especifica qual ação executada no processo é registrada no Visualizador de Eventos. No IIS 8.0, a única ação que se aplica é a ação de tempo limite ocioso, na qual o processo é encerrado porque estava ocioso para o período idleTimeout. O nome do sinalizador é igual a IdleTimeout . O valor é 1 .O valor padrão é IdleTimeout . |
||||||||||||
logonType |
Atributo de enumeração opcional. Especifica o tipo de logon para a identidade de processo. (Para obter informações adicionais sobre tipos de logon, consulte o artigo Função LogonUser.) Observação: esse atributo foi introduzido no IIS 7.5. O atributo logonType pode ser um dos valores possíveis a seguir; o padrão é LogonBatch .
|
||||||||||||
manualGroupMembership |
Atributo booliano opcional. Especifica se o SID (identificador de segurança) do grupo IIS_IUSRS é adicionado ao token do processo de trabalho. Quando false, o IIS usa automaticamente uma identidade do pool de aplicativos como se fosse um membro do grupo interno IIS_IUSRS, que tem acesso aos recursos necessários de arquivo e sistema. Quando true, uma identidade do pool de aplicativos deve ser explicitamente adicionada a todos os recursos que um processo de trabalho requer em runtime. O valor padrão é false . |
||||||||||||
maxProcesses |
Atributo uint opcional. Indica o número máximo de processos de trabalho que seriam usados para o pool de aplicativos.
1 . |
||||||||||||
password |
Atributo de cadeia de caracteres opcional. Especifica a senha associada ao atributo userName. Esse atributo só é necessário quando o valor de identityType é SpecificUser. Observação: para evitar o armazenamento de cadeias de caracteres de senha não criptografadas em arquivos de configuração, use sempre AppCmd.exe ou o gerenciador do IIS para inserir senhas. Se você usar essas ferramentas de gerenciamento, as cadeias de caracteres de senha serão criptografadas automaticamente antes de serem gravadas nos arquivos de configuração XML. Isso fornece melhor segurança de senha do que armazenar senhas não criptografadas. |
||||||||||||
pingingEnabled |
Atributo booliano opcional. Especifica se o ping está habilitado para o processo de trabalho. O valor padrão é true . |
||||||||||||
pingInterval |
Atributo timeSpan opcional. Especifica o tempo entre pings de monitoramento de integridade que o serviço WWW envia para um processo de trabalho. O valor padrão é 00:00:30 (30 segundos). |
||||||||||||
pingResponseTime |
Atributo timeSpan opcional. Especifica o tempo em que um processo de trabalho tem para responder a um ping de monitoramento de integridade. Depois que o limite de tempo for excedido, o serviço WWW encerrará o processo de trabalho. O valor padrão é 00:01:30 (1 minuto 30 segundos). |
||||||||||||
requestQueueDelegatorIdentity |
Atributo String opcional. Especifica a identidade da conta que tem permissão para delegar solicitações HTTP ao pool de aplicativos. Observação: esse atributo não está disponível na interface do usuário do Gerenciador dos Serviços de Informações da Internet (IIS). |
||||||||||||
setProfileEnvironment |
Atributo booliano opcional. Quando setProfileEnvironment é definido como True , o WAS cria um bloco de ambiente para passar para CreateProcessAsUser ao criar um processo de trabalho. Isso garante que o ambiente seja definido com base no perfil do usuário para o novo processo.O valor padrão é True . |
||||||||||||
shutdownTimeLimit |
Atributo timeSpan opcional. Especifica o tempo que o serviço W3SVC aguarda depois de iniciar uma reciclagem. Se o processo de trabalho não for desligado dentro do shutdownTimeLimit, ele será encerrado pelo serviço W3SVC. O valor padrão é 00:01:30 (1 minuto 30 segundos). |
||||||||||||
startupTimeLimit |
Atributo timeSpan opcional. Especifica a hora em que o IIS aguarda o início de um pool de aplicativos. Se o pool de aplicativos não for inicializado dentro do startupTimeLimit, o processo de trabalho será encerrado e a contagem de proteção rápida contra falhas será incrementada. O valor padrão é 00:01:30 (1 minuto 30 segundos). |
||||||||||||
userName |
Atributo de cadeia de caracteres opcional. Especifica a identidade na qual o pool de aplicativos é executado quando o identityType é SpecificUser. |
Elementos filho
Nenhum.
Exemplo de configuração
O exemplo de configuração a seguir usa o elemento do pool <add>
de aplicativos para criar um novo pool de aplicativos chamado Contoso. O elemento <recycling>
configura o registro em log para reinicializações do pool de aplicativos, o elemento <periodicRestart>
é configurado quando o pool de aplicativos é reiniciado e o elemento <processModel>
configura os atributos shutdownTimeLimit e startupTimeLimit para desligar e iniciar os processos de trabalho no pool de aplicativos por 30 segundos cada. Se esses limites de tempo forem excedidos, o IIS encerrará o processo de trabalho.
<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>
Exemplo de código
Os exemplos a seguir alteram os valores da propriedade processModel.shutdownTimeLimit e processModule.startupTimeLimit para 30 segundos cada para um pool de aplicativos chamado Contoso.
AppCmd.exe
appcmd.exe set apppool "Contoso" /processModel.shutdownTimeLimit:00:00:30
appcmd.exe set apppool "Contoso" /processModel.startupTimeLimit:00:00:30
Você também pode usar a seguinte sintaxe:
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
Observação
Defina o parâmetro commit para apphost
quando usar AppCmd.exe para definir essas configurações. Isso confirma as definições de configuração para a seção de local apropriado no arquivo 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