Magazine

IIS, recyclage et pool d'applications en .NET

Publié le 21 janvier 2008 par Olivier Duval

Le problème

Depuis quelques temps, nous avions par intermittence des timeout sur les accès pages, toutes les 3-4 heures, nous recevions une multitude (quelques centaines, sic) de notifications d’erreurs. En gros, certaines pages principales plantaient, puis tout redevenait normal après quelques minutes.

Qu’est ce qu’un Pool ?

Sous IIS 6.0, le serveur Web permet de créer des pools d’application (un peu comme apache 2 par site Web [virtual hosts]), qui permet d’isoler les applications entre elles (1 process w3wp.exe par pool est lancé, 1 pool = n applications).

process IIS

Un pool (qui peut héberger plusieurs applications) permet les avantages suivants, et il est bon de s’y pencher :

  • si une application d’un pool plante alors les autres applications des autres pool sont préservés,
  • d’avoir la possibilité de redémarrer une application Web sans impacter les autres,
  • de définir un compte d’exécution spécifique pour les applications hébergés, en définissant un utilisateur avec des droits contrôlés,
  • tout plein d’options (onglet Performance et Health) pour la vie des applications : relancer le pool si les applications ne répondent pas ou prend trop de CPU, de mémoire…ces options sont assez fines et très utiles pour préserver les applications Web d’une application qui serait mal développée.

IIS Pools

Identité pool

Le diagnostique et sa résolution

Sur notre plateforme, nous avons défini un ensemble de pools d’applications, chacun couvrant soit une application Web, soit des services Web, soit des services transverses (annuaire, moteur de recherche, ...).

Pour revenir à nos soucis de timeout, la configuration des pools faisait que ceux-là n’étaient pas recyclés (libération des ressources et relance) en même temps. Certains toutes les 3 heures, d’autres toutes les 24 h, etc…le recyclage peut mettre un certain temps, selon les caches qui sont chargés et autres opérations d’initialisation.

Aussi, si une application utilisait un service hébergé dans un pool qui était en train d’être recyclé (et de façon plus longue que prévue), l’application recevait un timeout, et le tout partait pour l’utilisateur en timeout, et donc un plantage sur la ou les pages demandées.

Nous avons donc décidé d’enlever le recyclage automatique des pools et de le replacer par une planification de celui-ci à une heure fixe, le soir (hors des heures ouvrables). On contrôle ainsi chacun des pools, et le recyclage s’effectue en même temps, et ô miracle, les problèmes semblent jusqu’à présent être résolus, du moins le phénomène ne s’est pas reproduit, croisons les doigts.

recyclage pool

1 lorsqu’une erreur intervient (exception .NET), nous notifions par mail automatiquement l’équipe de cette dernière (utilisateur, navigateur, page, referer, message, et pile d’exécution), et affichons une belle page pour l’utilisateur au lieu de la page d’erreur par défaut d’ASP.NET.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Olivier Duval 4 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte