Paramétrages initiaux des pools d'applications IIS6

Voici quelques recommandations/explications qui pourront vous aider lors du paramétrage initial (manuel ou automatisé) de vos pools d'applications ASP.NET sur vos serveurs IIS6.

Pool d'applications et worker process

Un pool d’application correspond à un processus W3WP.EXE (ou plusieurs, si WebGarden est différent de  1). Il est possible de n’avoir qu’une seule version du .NET Framework chargée dans un processus.

Dans le cas où vous auriez plusieurs applications ou plusieurs sites Web,

  • Vous devez faire attention à ce que les sites Web/répertoires virtuels qui sont affectés à un pool d’applications, utilisent la même version du .NET Framework
  • De plus, afin de faire une séparation des applications en plusieurs pools d’applications, vous devez tenir compte :
    • De la mémoire physique totale du serveur. En effet, chaque processus peut utiliser jusqu'à 1Go-1,5Go de mémoire virtuelle (rarement plus à cause de la fragmentation mémoire même si la limite théorique est de 2Go)
    • Du nombre d’applications et de leur empreinte mémoire respectives
  • Des résultats des tests de charge. En effet, si d’après les tests vous vous apercevez qu’une application consomme beaucoup de mémoire ou crashe régulièrement, cela fait sens de l’isoler dans un pool d’applications afin d’investiguer

Paramètres des pools d'applications

Premier point : il est conseillé d’enlever l’option « Recycle worker processes (in minutes) ». En effet, ce paramètre n’est pas adapté à la production dans la mesure où le recyclage peut se faire à n’importe quel moment de la journée.

Par contre, si vous le jugez utile, vous pouvez planifier un recyclage journalier pendant un une plage horaire où l’application n’est pas utilisée. Cela permet de relancer un nouveau processus W3WP.EXE et de repartir à zéro concernant la charge mémoire. Par contre, lors de la première connexion du premier utilisateur de la journée, l’application se chargera dans le W3WP.EXE. Ce chargement sera sensible au niveau des performances. Il est possible de ne pas subir cette baisse de performances au démarrage de l’application en simulant plusieurs accès au site Web (par un outil, par script) avant que le premier utilisateur se connecte. Je vous conseille aussi d'utiliser la précompilation ASP.NET.

Si une application possède une fuite mémoire, vous pouvez l’isoler dans un pool d’applications. Il est possible d’utiliser les options de « Memory recycling » ou un recyclage planifié toutes les nuits. Sachez que lorsqu’il y a un recyclage et que si l’application utilise le mode de session dit « InProc » (dans le Web.config), vous perdez les variables de l'application et de sessions.

Le recyclage par seuil de mémoire peut se faire en fonction de :

- « Maximum used memory » ce qui correspond à la taille réelle du processus en mémoire

Ou

- « Maximum virtual memory » ce qui correspond à la taille de la mémoire virtuelle adressée par le processus

Recycling

Le champ « Idle timeout » donne le nombre de minutes, après le dernier accès à l’application, au bout duquel le W3WP.EXE se décharge de la mémoire. Le but est d’économiser les ressources du serveur lorsque celui-ci n’est pas utilisé.

Le champ « Request queue limit » correspond à la taille de la file d’attente kernel utilisée pour les requêtes http entrantes destinées aux applications exécutées dans le pool d’applications.

Performance

Le champ « Enable pinging » indique le nombre de secondes entre chaque vérification de présence/bon fonctionnement du W3WP.EXE. Dans le cas où le processus ne répond pas, IIS en redémarre un nouveau afin de garantir la disponibilité du serveur Web.

Le champ « Enable rapid-fail protection » est le mécanisme inverse : si l’application est dangereuse pour la santé du serveur, le pool d’application est désactivé. Une action de l’administrateur est nécessaire pour le réactiver.

« Startup time limit » et « Shutdown time limit » correspondent au temps maximum que nous donnons à IIS pour, respectivement, démarrer/arrêter le W3WP.EXE. Si le processus ne démarre pas ou ne s’arrête pas dans le temps imparti. IIS fait un nouvel essai de démarrage/arrêt avec un nouveau processus.

Health