Utilisation du modèle de processus
La fiabilité est l'une des exigences les plus importantes imposées aux applications ASP.NET Framework. L'architecture d'applications s'exécutant à l'intérieur du processus serveur (dans IIS, Inetinfo.exe) ne constitue pas une base solide pour la génération d'applications fiables pouvant continuer à s'exécuter pendant une période prolongée. De trop nombreuses ressources sont partagées au niveau du processus et une erreur peut aisément mettre fin à la totalité du processus serveur.
Pour résoudre ce problème, ASP.NET fournit un modèle d'exécution out-of-process qui protège le processus serveur du code utilisateur. Il vous permet également d'appliquer l'heuristique à la durée de vie du processus afin d'améliorer la disponibilité de vos applications Web. L'utilisation de communications interprocessus asynchrones vous permet d'atteindre le meilleur équilibre entre les performances, l'évolutivité et la fiabilité.
Configuration du modèle de processus
Les paramètres du modèle de processus sont exposés dans le fichier de configuration racine de l'ordinateur, Machine.config. La section de configuration, appelée <processModel>, est illustrée dans l'exemple suivant. Le modèle de processus est activé par défaut (enable="true").
<processModel
enable="true"
timeout="infinite"
idleTimeout="infinite"
shutdownTimeout="0:00:05"
requestLimit="infinite"
requestQueueLimit="5000"
memoryLimit="80"
webGarden="false"
cpuMask="0xffffffff"
userName=""
password=""
logLevel="errors"
clientConnectedCheck="0:00:05"
/>
La plupart de ces paramètres contrôlent le moment du démarrage d'un nouveau processus de traitement pour répondre à des demandes (prenant normalement la place d'un ancien processus de traitement). Le modèle de processus prend en charge deux types de recyclage : le recyclage réactif et le recyclage proactif.
Recyclage de processus réactif
Le recyclage de processus réactif se produit si le processus a un comportement anormal ou est incapable de répondre à des demandes. Le processus affiche généralement les symptômes détectables, tels que les blocages, les violations d'accès, les fuites de mémoire notamment, afin de déclencher un recyclage de processus. Vous pouvez contrôler les conditions qui entraînent le redémarrage d'un processus en utilisant les paramètres de configuration décrits dans le tableau suivant.
| Paramètre | Description |
|
requestQueueLimit
|
Gère les conditions de blocage. La valeur DWORD correspond au nombre maximal de demandes autorisé dans la file d'attente, au-delà duquel le processus de traitement est considéré comme ayant un comportement anormal. Lorsque ce nombre est dépassé, un nouveau processus est lancé et les demandes sont réassignées. La valeur par défaut est 5 000 demandes.
|
|
memoryLimit
|
Gère les conditions de fuite de mémoire. La valeur DWORD correspond au pourcentage de mémoire physique pouvant être utilisé par le processus de traitement avant que son comportement soit considéré comme anormal. Lorsque ce pourcentage est dépassé, un nouveau processus est lancé et les demandes sont réassignées. La valeur par défaut est 80 %.
|
|
shutdownTimeout
|
Spécifie la durée pendant laquelle le processus de traitement doit s'arrêter normalement (valeur de chaîne au format h:min:s). Lorsque le délai expire, l'ISAPI ASP.NET arrête le processus de traitement. La valeur par défaut est « 00:00:05 ».
|
Recyclage de processus proactif
Le recyclage de processus proactif redémarre périodiquement le processus de traitement, même si le processus est sain. Cela peut être utile pour éviter tout refus de service dû à des conditions que le modèle de processus est incapable de détecter. Un processus peut être redémarré après un nombre spécifique de demandes ou au terme d'une période d'expiration.
| Paramètre | Description |
|
timeout
|
Valeur de chaîne au format h:min:s, configurant le délai limite au terme duquel un nouveau processus de traitement doit être lancé pour remplacer le processus actuel. La valeur par défaut est infinite, mot clé indiquant que le processus ne doit pas être redémarré.
|
|
idleTimeout
|
Valeur de chaîne au format h:min:s, configurant le temps d'inactivité au terme duquel le processus de traitement est automatiquement arrêté. La valeur par défaut est infinite, mot clé indiquant que le processus ne doit pas être redémarré.
|
|
requestLimit
|
Valeur DWORD correspondant au nombre de demandes au-delà duquel un nouveau processus de traitement doit être lancé pour remplacer le processus actuel. La valeur par défaut est infinite, mot clé indiquant que le processus ne doit pas être redémarré.
|
Journalisation des événements du modèle de processus
Le modèle de processus peut écrire des événements dans le journal des événements Windows lorsque des cycles de processus se produisent. Cette opération est contrôlée par l'attribut logLevel de la section de configuration <processModel>.
| Paramètre | Description |
|
logLevel
|
Contrôle que les événements de cycle de processus sont enregistrés dans le journal des événements. Vous avez le choix entre les valeurs suivantes :
- All : Tous les événements de cycle de processus sont enregistrés dans le journal.
- None : Aucun événement n'est enregistré dans le journal.
- Errors : Seuls les événements inattendus sont enregistrés dans le journal.
|
Lorsque se produit un événement de cycle de processus et que la journalisation est activée pour cet événement, les événements suivants sont écrits dans le journal des événements de l'application.
| Raison de l'arrêt | Type de journal des événements | Description |
|
Unexpected
|
Erreur
|
Le processus de traitement ASP.NET s'est arrêté de manière inattendue.
|
|
RequestQueueLimit
|
Erreur
|
Le processus de traitement ASP.NET a redémarré, car la limite de la file d'attente des demandes a été dépassée.
|
|
RequestLimit
|
Information
|
Le processus de traitement ASP.NET a redémarré, car la limite des demandes a été dépassée.
|
|
Timeout
|
Information
|
Le processus de traitement ASP.NET a redémarré, car l'intervalle du délai s'est écoulé.
|
|
IdleTimeout
|
Information
|
Le processus de traitement ASP.NET s'est arrêté, car l'intervalle du délai en état de veille s'est écoulé.
|
|
MemoryLimitExceeded
|
Erreur
|
Le processus de traitement ASP.NET a redémarré, car la limite de mémoire du processus a été dépassée.
|
Activation de jardins Web
Le modèle de processus permet l'évolutivité sur des ordinateurs multiprocesseurs en répartissant le travail entre plusieurs processus (un pour chaque UC), ayant un paramètre Affinité du processeur correspondant à son UC. Cela élimine les conflits de verrouillage interprocesseurs, ce qui est idéal pour les grands systèmes SMP. Cette technique est appelée « jardinage Web ». Les paramètres de configuration pour l'activation de jardins Web sont énumérés dans le tableau suivant. Remarquez que ces paramètres n'entrent en vigueur qu'après le redémarrage du serveur. IIS doit être redémarré pour que ces modifications soient appliquées.
| Paramètre | Description |
|
webGarden
|
Contrôle l'affinité de l'UC. La valeur True indique que l'affinité des processus doit être définie à l'UC correspondante. La valeur par défaut est False.
|
|
cpuMask
|
Contrôle le nombre de processus et le mode de fonctionnement du jardin Web. Un processus est lancé pour chaque UC dont le bit correspondant dans le masque a la valeur 1. Si UseCPUAffinity a la valeur 0, le paramètre cpuMask ne contrôle que le nombre de processus de traitement (nombre de bits égal à 1). Le nombre maximal de processus de traitement autorisé est égal au nombre d'UC. Par défaut, toutes les UC sont activées. Un nombre de processus de traitement égal au nombre d'UC s'exécute. La valeur par défaut est 0xffffffff.
|
Le jardinage Web possède quelques effets secondaires que vous devez connaître :
- Si votre application utilise l'état de session, elle doit choisir un fournisseur out-of-process (NT Service ou SQL).
- L'état et les statiques de l'application sont déterminés pour chaque processus, et non pour chaque ordinateur.
- La mise en cache s'effectue pour chaque processus, et non pour chaque ordinateur.
- ASP.NET fournit un modèle d'exécution out-of-process qui protège le processus serveur du code utilisateur. Il vous permet également d'appliquer l'heuristique à la durée de vie du processus afin d'améliorer la disponibilité globale des applications Web.
- Les paramètres <processModel> sont exposés dans le fichier de configuration racine Machine.config de l'ordinateur. Le modèle de processus est activé par défaut.
- Le modèle de processus prend en charge deux types de recyclage : le recyclage réactif et le recyclage proactif. Le recyclage de processus réactif se produit si le processus a un comportement anormal ou est incapable de répondre à des demandes. Le recyclage de processus proactif redémarre périodiquement le processus de traitement, même si le processus est sain.
- Le modèle de processus peut écrire des événements dans le journal des événements Windows lorsque des cycles de processus se produisent. Cette opération est contrôlée par l'attribut au niveau du journal dans la section de configuration <processModel>.
- Le modèle de processus permet l'évolutivité sur des ordinateurs multiprocesseurs en répartissant le travail entre plusieurs processus (un pour chaque UC), ayant un paramètre Affinité du processeur correspondant à son UC. Cette technique est appelée « jardinage Web ».
|