Configuración del modelo de proceso para un grupo de aplicaciones <processModel>
Información general
Mediante el uso del elemento <processModel>
, puede configurar muchas de las características de seguridad, rendimiento, mantenimiento y fiabilidad de los grupos de aplicaciones en IIS 7 y versiones posteriores. Entre ellas, se incluyen las siguientes funciones:
- Identidad del grupo de aplicaciones, que es el nombre del servicio o la cuenta de usuario en la que se ejecuta el proceso de trabajo del grupo de aplicaciones. Esto se define mediante el atributo identityType. De manera predeterminada, a partir de IIS 7.5, un grupo de aplicaciones se ejecuta en la cuenta integrada ApplicationPoolIdentity, que el Servicio de activación de procesos de Windows (WAS) crea dinámicamente. (En IIS 7.0, la identidad predeterminada era la cuenta de NetworkService). Puede cambiar el valor del atributo identityType a la cuenta integrada de NetworkService, la cuenta LocalService, la cuenta integrada de LocalSystem o una cuenta personalizada que cree. Si elige una cuenta personalizada, defina las credenciales de la cuenta mediante los atributos userName y password. Pero tenga en cuenta que las cuentas NetworkService, LocalService y LocalSystem tienen más derechos de usuario que la cuenta ApplicationPoolIdentity. (Advertencia: Ejecutar un grupo de aplicaciones mediante derechos de usuario de alto nivel conlleva un riesgo de seguridad grave). Además, puede usar el atributo logonType para especificar si la identidad del proceso debe iniciar sesión como un usuario o servicio por lotes. (Para obtener información adicional sobre los tipos de inicio de sesión, vea el artículo Función LogonUser).
- Jardinería web y uso del hardware de acceso a memoria no uniforme (NUMA), que puede configurar estableciendo el atributo maxProcesses. Para el uso de la jardinería web, vea maxProcesses en un valor mayor que uno. Para el uso del hardware NUMA, establezca maxProcesses en un valor de "0" a fin de especificar que IIS ejecuta el mismo número de procesos de trabajo que nodos NUMA.
- Configuración de tiempo de espera de inactividad, que le permite establecer cuánto tiempo permanece inactivo un proceso de trabajo antes de que se cierre. Edite el atributo idleTimeout para configurar este valor.
- Seguimiento de estado habilitando pings en el proceso de trabajo, el tiempo máximo permitido para que un proceso de trabajo responda a un ping y la frecuencia de pings enviados a un proceso de trabajo a fin de supervisar su estado. Edite los atributos pingingEnabled, pingInterval y pingResponseTime para configurar estas opciones.
- Límites de tiempo de inicio y cierre del proceso de trabajo. El atributo shutdownTimeLimit establece el primer límite y determina el intervalo que IIS 7 y versiones posteriores proporciona a un proceso de trabajo para finalizar todas las solicitudes antes de que el servicio WWW finalice el proceso de trabajo. El atributo startupTimeLimit establece el segundo límite y especifica la cantidad de tiempo que IIS 7 y versiones posteriores permiten a un grupo de aplicaciones para que se inicie.
Compatibilidad
Versión | Notas |
---|---|
IIS 10.0 | El elemento <processModel> no se modificó en IIS 10.0. |
IIS 8.5 | El atributo idleTimeoutAction se agregó habilitando un proceso de trabajo que está inactivo durante la duración del atributo idleTimeout que se va a terminar o suspender, no solo terminar. |
IIS 8.0 | El atributo setProfileEnvironment se agregó para permitir que el entorno se establezca en función del perfil de usuario para un nuevo proceso. Se agregaron valores para el atributo maxProcesses , incluida la compatibilidad con el acceso a memoria no uniforme (NUMA). El atributo logEventOnProcessModel se agregó para especificar que se ha registrado la acción realizada en el proceso. |
IIS 7.5 | El elemento <processModel> del elemento <add> se actualizó en IIS 7.5 a fin de incluir la configuración que permite ejecutar aplicaciones con el nuevo objeto ApplicationPoolIdentity y especificar el tipo de inicio de sesión para la identidad del proceso. |
IIS 7.0 | El elemento <processModel> se introdujo en IIS 7.0. |
IIS 6,0 | El elemento <processModel> reemplaza parte de la configuración del objeto de metabase IIsApplicationPools de IIS 6.0. |
Configuración
La colección <applicationPools>
se incluye en la instalación predeterminada de IIS 7 y versiones posteriores.
Procedimientos
Procedimientos para editar las opciones de configuración del modelo de proceso
Abra el Administrador de Internet Information Services (IIS):
Si usa Windows Server 2012 o Windows Server 2012 R2:
- En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, después, en Administrador de Internet Information Services (IIS).
Si usa Windows 8 o Windows 8.1:
- Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
- En Panel de control, haga clic en Herramientas administrativas y, después, haga doble clic en Administrador de Internet Information Services (IIS).
Si usa Windows Server 2008 o Windows Server 2008 R2:
- En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, después, haga clic en Administrador de Internet Information Services (IIS).
Si usa Windows Vista o Windows 7:
- En la barra de tareas, haga clic en Inicio y, luego, haga clic en Panel de control.
- Haga doble clic en Herramientas administrativas y, después, haga doble clic en Administrador de Internet Information Services (IIS).
En el panel Conexiones, expanda el nombre del servidor, haga clic en Grupos de aplicaciones y después en el grupo de aplicaciones que quiera editar.
En el panel Acciones, haga clic en Configuración avanzada...
En el cuadro de diálogo Configuración avanzada, haga clic en la propiedad del modelo de proceso que quiere editar y, después, edítela en la sección de valor de propiedad del cuadro de diálogo; luego, haga clic en Aceptar. Por ejemplo, cambie el Límite de tiempo de apagado (segundos) y los Límites de tiempo de inicio (segundos) a 30.
Procedimientos a fin de configurar IIS para su uso con hardware de acceso a memoria no uniforme (NUMA)
Abra el Administrador de Internet Information Services (IIS):
Si usa Windows Server 2012 o versiones posteriores:
- En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, después, en Administrador de Internet Information Services (IIS).
Si usa Windows 8 o versiones posteriores:
- Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
- En Panel de control, haga clic en Herramientas administrativas y, después, haga doble clic en Administrador de Internet Information Services (IIS).
En el panel Conexiones, expanda el nombre del servidor y, después, haga clic en Grupos de aplicaciones.
En el panel Grupos de aplicaciones, seleccione el grupo que quiere configurar para NUMA.
En el panel Acciones, seleccione Configuración avanzada.
En el panel Modelo de proceso, establezca Número máximo de procesos de trabajo en
0
.
Procedimientos para configurar la acción de tiempo de espera de inactividad
Abra el Administrador de Internet Information Services (IIS):
Si usa Windows Server 2012 R2:
- En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, después, en Administrador de Internet Information Services (IIS).
Si usa Windows 8.1:
- Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
- En Panel de control, haga clic en Herramientas administrativas y, después, haga doble clic en Administrador de Internet Information Services (IIS).
En el panel Conexiones, haga doble clic en el nombre del servidor, haga doble clic en Grupos de aplicaciones y, después, seleccione el grupo de aplicaciones que quiere configurar.
En el panel Acciones, haga clic en Configuración avanzada.
En la sección Modelo de proceso del cuadro de diálogo Configuración avanzada, en idleTimeoutAction, seleccione Finalizar o Suspender.
Haga clic en OK.
Configuración
Puede configurar el elemento <processModel>
en el nivel de servidor en el archivo ApplicationHost.config.
Atributos
Atributo | Descripción | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
identityType |
Atributo enum opcional. Especifica la identidad de la cuenta en la que se ejecuta el grupo de aplicaciones. Nota: A partir de IIS 7.5, el valor predeterminado es ApplicationPoolIdentity. (En IIS 7.0, el valor predeterminado era NetworkService ).El atributo identityType puede ser uno de los siguientes valores posibles; el valor predeterminado es NetworkService .
|
||||||||||||
idleTimeout |
Atributo timeSpan opcional. Especifica cuánto tiempo (en minutos) debe ejecutarse inactivo un proceso de trabajo si no se reciben nuevas solicitudes y el proceso de trabajo no procesa las solicitudes. Una vez transcurrido el tiempo asignado, el proceso de trabajo debe solicitar que el servicio WWW lo cierre. El valor predeterminado es 00:20:00 . Para deshabilitar la característica de tiempo de espera de inactividad, establezca este valor en 00:00:00 . |
||||||||||||
idleTimeoutAction |
Atributo enum opcional. Especifica la acción que se va a realizar cuando se ha alcanzado la duración del tiempo de espera de inactividad. Antes de IIS 8.5, se habría finalizado un proceso de trabajo que estuviera inactivo durante el atributo idleTimeout . Después de IIS 8.5, tiene la opción de terminar un proceso de trabajo que alcance el límite idleTimeout o bien suspenderlo moviéndolo de la memoria al disco. Suspender un proceso probablemente tardará menos tiempo y consumirá menos memoria que terminarlo.Puede configurar una acción de tiempo de espera de inactividad de suspensión con la solicitud falsa de inicialización de la aplicación (vea applicationInitialization ).El atributo idleTimeoutAction puede tener los siguientes valores posibles. El valor predeterminado es Terminate .
|
||||||||||||
loadUserProfile |
Atributo Boolean opcional. Especifica si IIS carga el perfil de usuario para la identidad del grupo de aplicaciones. Establecer este valor en false hace que IIS se revierta al comportamiento de IIS 6.0. IIS 6.0 no carga el perfil de usuario para una identidad del grupo de aplicaciones. El valor predeterminado es false . |
||||||||||||
logEventOnProcessModel |
Atributo flags opcional. Especifica qué acción realizada en el proceso se registra en el Visor de eventos. En IIS 8.0, la única acción que se aplica es la de tiempo de espera de inactividad, en la que se termina el proceso porque estaba inactivo durante el periodo idleTimeout. El nombre de la marca es igual a IdleTimeout . El valor es 1 .El valor predeterminado es IdleTimeout . |
||||||||||||
logonType |
Atributo enum opcional. Especifica el tipo de inicio de sesión para la identidad del proceso. (Para obtener información adicional sobre los tipos de inicio de sesión, vea el artículo Función LogonUser). Nota: Este atributo se introdujo en IIS 7.5. El atributo logonType puede ser uno de los siguientes valores posibles; el valor predeterminado es LogonBatch .
|
||||||||||||
manualGroupMembership |
Atributo Boolean opcional. Especifica si el identificador de seguridad (SID) del grupo IIS_IUSRS se ha agregado al token de proceso de trabajo. Cuando es false, IIS usa automáticamente una identidad del grupo de aplicaciones como si fuera miembro del grupo de IIS_IUSRS integrado, que tiene acceso a los recursos necesarios del sistema y los archivos. Cuando es true, se debe agregar explícitamente una identidad del grupo de aplicaciones a todos los recursos que requiere un proceso de trabajo en runtime. El valor predeterminado es false . |
||||||||||||
maxProcesses |
Atributo uint opcional. Indica el número máximo de procesos de trabajo que se usarían para el grupo de aplicaciones.
1 . |
||||||||||||
password |
Atributo de cadena opcional. Especifica la contraseña asociada al atributo userName. Este atributo solo es necesario cuando el valor de identityType es SpecificUser. Nota: Para evitar almacenar cadenas de contraseña sin cifrar en archivos de configuración, use siempre AppCmd.exe o administrador de IIS a fin de escribir contraseñas. Si usa estas herramientas de administración, las cadenas de contraseña se cifrarán automáticamente antes de que se escriban en los archivos de configuración XML. Esto proporciona una mejor seguridad de contraseña que almacenar contraseñas sin cifrar. |
||||||||||||
pingingEnabled |
Atributo Boolean opcional. Especifica si el ping está habilitado para el proceso de trabajo. El valor predeterminado es true . |
||||||||||||
pingInterval |
Atributo timeSpan opcional. Especifica el tiempo entre pings de supervisión de estado que el servicio WWW envía a un proceso de trabajo. El valor predeterminado es 00:00:30 (30 segundos). |
||||||||||||
pingResponseTime |
Atributo timeSpan opcional. Especifica el tiempo que se le da a un proceso de trabajo para responder a un ping de supervisión de estado. Una vez superado el límite de tiempo, el servicio WWW finaliza el proceso de trabajo. El valor predeterminado es 00:01:30 (1 minuto y 30 segundos). |
||||||||||||
requestQueueDelegatorIdentity |
Atributo String opcional. Especifica la identidad de la cuenta que tiene permiso para delegar solicitudes HTTP al grupo de aplicaciones. Nota: Este atributo no está disponible en la interfaz de usuario del Administrador de Internet Information Services (IIS). |
||||||||||||
setProfileEnvironment |
Atributo Boolean opcional. Cuando setProfileEnvironment se establece en True , WAS crea un bloque de entorno para pasarlo a CreateProcessAsUser al crear un proceso de trabajo. Esto garantiza que el entorno se establezca en función del perfil de usuario para el nuevo proceso.El valor predeterminado es True . |
||||||||||||
shutdownTimeLimit |
Atributo timeSpan opcional. Especifica el tiempo que el servicio W3SVC espera después de iniciar un reciclaje. Si el proceso de trabajo no se cierra en el límite shutdownTimeLimit, el servicio W3SVC lo finalizará. El valor predeterminado es 00:01:30 (1 minuto y 30 segundos). |
||||||||||||
startupTimeLimit |
Atributo timeSpan opcional. Especifica el tiempo que IIS espera a que se inicie un grupo de aplicaciones. Si el grupo de aplicaciones no se inicia en el límite startupTimeLimit, se finaliza el proceso de trabajo y se incrementa el recuento de protección rápida contra errores. El valor predeterminado es 00:01:30 (1 minuto y 30 segundos). |
||||||||||||
userName |
Atributo de cadena opcional. Especifica la identidad en la que se ejecuta el grupo de aplicaciones cuando identityType es SpecificUser. |
Elementos secundarios
Ninguno.
Ejemplo de configuración
En el ejemplo de configuración siguiente se usa el elemento <add>
del grupo de aplicaciones para crear un grupo de aplicaciones denominado Contoso. El elemento <recycling>
configura el registro para los reinicios del grupo de aplicaciones, el elemento <periodicRestart>
configura cuándo se reinicia el grupo de aplicaciones y el elemento <processModel>
configura los atributos shutdownTimeLimit y startupTimeLimit para apagar e iniciar los procesos de trabajo en el grupo de aplicaciones durante 30 segundos cada uno. Si se superan estos límites de tiempo, IIS finaliza el proceso de trabajo.
<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>
Código de ejemplo
En los ejemplos siguientes se cambian los valores de la propiedad processModel.shutdownTimeLimit y processModule.startupTimeLimit a 30 segundos cada uno para un grupo de aplicaciones denominado Contoso.
AppCmd.exe
appcmd.exe set apppool "Contoso" /processModel.shutdownTimeLimit:00:00:30
appcmd.exe set apppool "Contoso" /processModel.startupTimeLimit:00:00:30
También puede usar la sintaxis siguiente:
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
Nota:
Debe asegurarse de establecer el parámetrocommit en apphost
cuando use AppCmd.exe para configurar estos valores. Esto confirma los valores de configuración en la sección de ubicación adecuada del archivo 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