Paramètres de modèle de processus pour un <processModel> de pool d’applications
Vue d’ensemble
À l’aide de l’élément <processModel>
, vous pouvez configurer une grande partie des fonctionnalités de sécurité, de performances, d’intégrité et de fiabilité des pools d’applications sur IIS 7 et versions ultérieures. Vous disposez des fonctionnalités suivantes :
- « Application pool identity » (identité du pool d’applications) est le nom du service ou du compte d’utilisateur sous lequel le processus de travail du pool d’applications s’exécute. Cela est défini par l’attribut identityType . Par défaut, à partir d’IIS 7.5, un pool d’applications s’exécute sous le compte ApplicationPoolIdentity intégré , qui est créé dynamiquement par le service d’activation des processus Windows (WAS). (Dans IIS 7.0, l’identité par défaut était le compte NetworkService.) Vous pouvez remplacer la valeur de l’attribut identityType par le compte NetworkService intégré, le compte LocalService, le compte LocalSystem intégré ou un compte personnalisé que vous créez. Si vous choisissez un compte personnalisé, définissez les informations d’identification du compte à l’aide des attributs userName et password. Sachez toutefois que les comptes NetworkService, LocalService et LocalSystem ont plus de droits d’utilisateur que le compte ApplicationPoolIdentity . (Avertissement : exécuter un pool d’applications à l’aide de droits utilisateur de haut niveau représente un risque de sécurité sérieux.) En outre, vous pouvez utiliser l’attribut logonType pour spécifier si l’identité du processus doit se connecter en tant qu’utilisateur ou service par lots. (Pour plus d’informations sur les types d’ouverture de session, consultez l’article Fonction LogonUser.)
- Jardinage web et utilisation du matériel NUMA (Non Uniform Memory Access), que vous pouvez configurer en définissant l’attribut maxProcesses. Pour le jardinage web, consultez maxProcesses avec une valeur supérieure à un. Pour utiliser du matériel NUMA, définissez maxProcesses sur la valeur « 0 » pour spécifier que IIS exécute le même nombre de processus de travail que le nombre de nœuds NUMA.
- Paramètres de délai d’inactivité, ce qui vous permet de définir la durée pendant laquelle un processus de travail peut rester inactif avant qu’il ne s’arrête. Modifiez l’attribut idleTimeout pour configurer ce paramètre.
- Surveillance de l’intégrité en activant les tests ping sur le processus de travail, la durée maximale autorisée pour qu’un processus de travail réponde à un test ping et la fréquence des pings envoyés à un processus de travail pour surveiller son intégrité. Modifiez les attributs pingingEnabled, pingIntervalet pingResponseTime pour configurer ces paramètres.
- Limites de temps d’arrêt et de démarrage du processus de travail. La première limite est définie par l’attribut shutdownTimeLimit et détermine l’intervalle que IIS 7 (et les versions ultérieures) donne à un processus de travail pour terminer toutes ses demandes avant d’être arrêté par le service WWW. La deuxième limite est définie par l’attribut startupTimeLimit et spécifie la durée pendant laquelle IIS 7 (et les versions ultérieures) permet à un pool d’applications de démarrer.
Compatibilité
Version | Notes |
---|---|
IIS 10.0 | L’élément <processModel> n’a fait l’objet d’aucune modification dans IIS 10.0. |
IIS 8.5 | L’attribut idleTimeoutAction a été ajouté pour permettre à un processus de travail inactif pendant la durée de l’attribut idleTimeout d’être arrêté ou suspendu, pas seulement arrêté. |
IIS 8.0 | L’attribut setProfileEnvironment a été ajouté pour permettre à l’environnement d’être défini en fonction du profil utilisateur d’un nouveau processus. Des valeurs ont été ajoutées pour l’attribut maxProcesses , y compris la prise en charge de l’accès à la mémoire non uniforme (NUMA). L’attribut logEventOnProcessModel a été ajouté pour spécifier que l’action effectuée dans le processus est journalisée. |
IIS 7.5 | L’élément <processModel> de l’élément <add> a été mis à jour dans IIS 7.5 pour inclure des paramètres qui vous permettent d’exécuter des applications à l’aide du nouvel attribut ApplicationPoolIdentity et de spécifier le type de connexion pour l’identité du processus. |
IIS 7.0 | L’élément <processModel> a été introduit dans IIS 7.0. |
IIS 6.0 | L’élément <processModel> remplace certains des paramètres de l’objet métabase IIS 6.0 IIsApplicationPools. |
Programme d’installation
La collection <applicationPools>
est incluse dans l’installation par défaut d’IIS 7 et les versions ultérieures.
Procédure
Comment modifier les paramètres de configuration du modèle de processus
Ouvrez le Gestionnaire Internet Information Services (IIS) :
Si vous utilisez Windows Server 2012 ou Windows Server 2012 R2 :
- Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis sur Gestionnaire Internet Information Services (IIS).
Si vous utilisez Windows 8 ou Windows 8.1 :
- Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
- Cliquez sur Outils d'administration, puis double-cliquez sur Gestionnaire des services Internet (IIS).
Si vous utilisez Windows Server 2008 ou Windows Server 2008 R2 :
- Cliquez sur Démarrer, placez le curseur sur Outils d'administration, puis cliquez sur Gestionnaire Internet Information Services (IIS).
Si vous utilisez Windows Vista ou Windows 7 :
- Dans la barre des tâches, cliquez sur Démarrer, puis sur Panneau de configuration.
- Double-cliquez sur Outils d'administration, puis double-cliquez sur Gestionnaire des services Internet (IIS).
Dans le volet Connexions, développez le nom du serveur, cliquez sur Pools d’applications, puis cliquez sur le pool d’applications que vous souhaitez modifier.
Dans le volet Actions, cliquez sur Paramètres avancés...
Dans la boîte de dialogue Paramètres avancés, cliquez sur la propriété de modèle de processus que vous souhaitez modifier, puis modifiez-la dans la section valeur de propriété de la boîte de dialogue, puis cliquez sur OK. Par exemple, remplacez les valeurs limite de temps d’arrêt (secondes) et limites de temps de démarrage (secondes) par 30.
Guide pratique pour configurer IIS en combinaison avec du matériel NUMA (Non Uniform Memory Access)
Ouvrez le Gestionnaire Internet Information Services (IIS) :
Si vous utilisez Windows Server 2012 ou une version ultérieure :
- Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis sur Gestionnaire Internet Information Services (IIS).
Si vous utilisez Windows 8 ou une version ultérieure :
- Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
- Cliquez sur Outils d'administration, puis double-cliquez sur Gestionnaire des services Internet (IIS).
Dans le volet Connexions, développez le nom de serveur, puis cliquez sur Pools d'applications.
Dans le volet Pools d’applications, sélectionnez le pool que vous souhaitez configurer pour NUMA.
Dans le volet Actions, sélectionnez Paramètres avancés.
Sous le volet Modèle de processus, définissez le nombre maximal de processus de travail sur
0
.
Comment configurer l’action de délai d’inactivité
Ouvrez le Gestionnaire Internet Information Services (IIS) :
Si vous utilisez Windows Server 2012 R2 :
- Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis sur Gestionnaire Internet Information Services (IIS).
Si vous utilisez Windows 8.1 :
- Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
- Cliquez sur Outils d'administration, puis double-cliquez sur Gestionnaire des services Internet (IIS).
Dans le volet Connexions, double-cliquez sur le nom du serveur, double-cliquez sur Pools d’applications, puis sélectionnez le pool d’applications à configurer.
Dans le volet Actions, cliquez sur Paramètres avancés.
Dans la section Modèle de processus de la boîte de dialogue Paramètres avancés, pour idleTimeoutAction, sélectionnez Arrêter ou Suspendre.
Cliquez sur OK.
Configuration
Vous pouvez configurer l’élément <processModel>
au niveau du serveur dans le fichier ApplicationHost.config.
Attributs
Attribut | Description | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
identityType |
Attribut d’énumération facultatif. Spécifie l’identité de compte sous laquelle le pool d’applications s’exécute. Remarque : à partir d’IIS 7.5, la valeur par défaut est ApplicationPoolIdentity. (Dans IIS 7.0, la valeur par défaut était NetworkService .)L’attribut identityType peut être l’une des valeurs possibles suivantes ; sa valeur par défaut est NetworkService .
|
||||||||||||
idleTimeout |
Attribut timeSpan facultatif. Spécifie la durée (en minutes) pendant laquelle un processus de travail doit rester inactif si aucune nouvelle demande n’est reçue et que le processus de travail ne traite pas de demandes. Une fois le temps alloué écoulé, le processus de travail doit demander à être arrêté par le service WWW. La valeur par défaut est 00:20:00 . Pour désactiver la fonctionnalité de délai d’inactivité, définissez cette valeur sur 00:00:00 . |
||||||||||||
idleTimeoutAction |
Attribut d’énumération facultatif. Spécifie l’action à effectuer lorsque la durée du délai d’inactivité a été atteinte. Avant IIS 8.5, un processus de travail inactif pendant la durée de l’attribut idleTimeout serait arrêté. Après IIS 8.5, vous avez le choix d’arrêter un processus de travail qui atteint la limite idleTimeout ou de le suspendre en le déplaçant de la mémoire vers le disque. L’interruption d’un processus prend probablement moins de temps et consomme moins de mémoire que l’arrêt de celui-ci.Vous pouvez configurer une action de délai d’inactivité de suspension avec la fausse demande d’initialisation de l’application (voir applicationInitialization .L’attribut idleTimeoutAction peut avoir les valeurs possibles suivantes. La valeur par défaut est Terminate .
|
||||||||||||
loadUserProfile |
Attribut booléen facultatif. Spécifie si IIS charge le profil utilisateur pour l’identité du pool d’applications. Si vous définissez cette valeur sur false, IIS revient au comportement d’IIS 6.0. IIS 6.0 ne charge pas le profil utilisateur pour une identité de pool d’applications. La valeur par défaut est false . |
||||||||||||
logEventOnProcessModel |
Attribut d’indicateurs facultatifs. Spécifie l’action effectuée dans le processus qui est journalisée dans l’Observateur d’événements. Dans IIS 8.0, la seule action qui s’applique est l’action de délai d’inactivité, dans laquelle le processus est arrêté, car il était inactif pour la période idleTimeout. Le nom de l’indicateur est égal à IdleTimeout . La valeur est 1 .La valeur par défaut est IdleTimeout . |
||||||||||||
logonType |
Attribut d’énumération facultatif. Spécifie le type d’ouverture de session pour l’identité du processus. (Pour plus d’informations sur les types d’ouverture de session, consultez l’article Fonction LogonUser.) Remarque : Cet attribut a été introduit dans IIS 7.5. L’attribut logonType peut être l’une des valeurs possibles suivantes ; sa valeur par défaut est LogonBatch .
|
||||||||||||
manualGroupMembership |
Attribut booléen facultatif. Spécifie si l’identificateur de sécurité du groupe IIS_IUSRS (SID) est ajouté au jeton de processus de travail. Lorsque la valeur est false, IIS utilise automatiquement une identité de pool d’applications comme s’il s’agissait d’un membre du groupe intégré IIS_IUSRS, qui a accès aux ressources système et aux fichiers nécessaires. Lorsque la valeur est true, une identité de pool d’applications doit être explicitement ajoutée à toutes les ressources requises par un processus de travail au moment de son exécution. La valeur par défaut est false . |
||||||||||||
maxProcesses |
Attribut uint facultatif. Indique le nombre maximal de processus de travail qui seraient utilisés pour le pool d’applications.
1 . |
||||||||||||
password |
Attribut de chaîne facultatif. Spécifie le mot de passe associé à l’attribut userName . Cet attribut n’est nécessaire que lorsque la valeur de identityType est SpecificUser. Remarque : Pour éviter de stocker des chaînes de mot de passe non chiffrées dans des fichiers de configuration, utilisez toujours AppCmd.exe ou le Gestionnaire IIS pour entrer des mots de passe. Si vous utilisez ces outils de gestion, les chaînes de mot de passe sont chiffrées automatiquement avant d’être écrites dans les fichiers de configuration XML. Cela offre une meilleure sécurité de mot de passe que le stockage de mots de passe non chiffrés. |
||||||||||||
pingingEnabled |
Attribut booléen facultatif. Spécifie si le test ping est activé pour le processus de travail. La valeur par défaut est true . |
||||||||||||
pingInterval |
Attribut timeSpan facultatif. Spécifie le temps entre les tests ping de surveillance de l’intégrité que le service WWW envoie à un processus de travail. La valeur par défaut est 00:00:30 (30 secondes). |
||||||||||||
pingResponseTime |
Attribut timeSpan facultatif. Spécifie le temps dont un processus de travail dispose pour répondre à un test ping de surveillance de l’intégrité. Une fois la limite de temps dépassée, le service WWW met fin au processus de travail. La valeur par défaut est 00:01:30 (1 minute 30 secondes). |
||||||||||||
requestQueueDelegatorIdentity |
Attribut String facultatif. Spécifie l’identité du compte qui a l’autorisation de déléguer des requêtes HTTP au pool d’applications. Remarque : cet attribut n’est pas disponible dans l’IU du Gestionnaire Internet Information Services (IIS). |
||||||||||||
setProfileEnvironment |
Attribut booléen facultatif. Lorsque setProfileEnvironment est défini sur True , WAS crée un bloc d’environnement à transmettre à CreateProcessAsUser lors de la création d’un processus de travail. Cela garantit que l’environnement est défini en fonction du profil utilisateur pour le nouveau processus.La valeur par défaut est True . |
||||||||||||
shutdownTimeLimit |
Attribut timeSpan facultatif. Spécifie le temps d’attente du service W3SVC après avoir lancé un recyclage. Si le processus de travail ne s’arrête pas en shutdownTimeLimit, il est arrêté par le service W3SVC. La valeur par défaut est 00:01:30 (1 minute 30 secondes). |
||||||||||||
startupTimeLimit |
Attribut timeSpan facultatif. Spécifie le temps pendant lequel IIS attend qu’un pool d’applications démarre. Si le pool d’applications ne démarre pas en startupTimeLimit, le processus de travail est arrêté et le nombre de protection rapide en cas d’échec est incrémenté. La valeur par défaut est 00:01:30 (1 minute 30 secondes). |
||||||||||||
userName |
Attribut de chaîne facultatif. Spécifie l’identité sous laquelle le pool d’applications s’exécute quand identityType est SpecificUser. |
Éléments enfants
Aucune.
Exemple Configuration
L’exemple de configuration suivant utilise l’élément de pool d’applications <add>
pour créer un pool d’applications nommé Contoso. L’élément <recycling>
configure la journalisation des redémarrages du pool d’applications, l’élément <periodicRestart>
configure le redémarrage du pool d’applications et l’élément <processModel>
configure les attributs shutdownTimeLimit et startupTimeLimit d’arrêt et de démarrage des processus de travail dans le pool d’applications à 30 secondes chacun. Si ces limites de temps sont dépassées, IIS met fin au processus de travail.
<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>
Exemple de code
Les exemples suivants modifient les valeurs de propriété processModel.shutdownTimeLimit et processModule.startupTimeLimit à 30 secondes chacune pour un pool d’applications nommé Contoso.
AppCmd.exe
appcmd.exe set apppool "Contoso" /processModel.shutdownTimeLimit:00:00:30
appcmd.exe set apppool "Contoso" /processModel.startupTimeLimit:00:00:30
Vous pouvez également utiliser la syntaxe suivante :
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
Remarque
Vous devez veiller à définir le paramètre commit sur apphost
quand vous utilisez AppCmd.exe pour configurer ces paramètres. Cela valide les paramètres de configuration dans la section d’emplacement appropriée dans le fichier 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