Cet article détaille le plan d'action à mettre en place pour créer une règle dans Debug Diagnostic 1.2 afin d'automatiser la génération d'un dump lorsqu'une exception est levée au sein d'un processus relatif à IIS (par exemple un processus "W3WP.exe").
Ce plan d'action est applicable lorsque votre processus "W3WP.exe" plante ce qui, dans le contexte d'IIS, sous-entend que le processus est tué ou redémarré, suite à une exception spécifique (du type Second Chance). Ceci implique donc un arrêt du processus et s'il est relancé, un changement de PID. Il faut bien faire attention à ne pas confondre Crash et Hang, car configurer une règle en mode Crash pour un Hang ne permettra pas la génération de dumps.
Ce plan d'action peut également être utilisé pour simplement capturer une exception qui n'est pas fatale au processus (du type First Chance).
Plan d'action
- Debug Diagnostic 1.2 est téléchargeable à l'adresse suivante : http://www.microsoft.com/download/en/details.aspx?id=26798
- Une fois le logiciel installé et lancé sur le serveur IIS, l'assistant "Select Rule Type" se charge
- Choisissez "Crash" puis cliquez sur "Suivant >"
- Dans la fenêtre "Select Target Type"
- Choisissez "A specific IIS web application pool", puis cliquez sur "Suivant >"
Cela aura pour conséquence de générer un dump uniquement sur le processus W3WP.exe correspondant à votre Application Pool.
- Vous pouvez sélectionner "All IIS/COM+ related processes" si vous voulez surveiller tous les processus liés à IIS.
- Vous pouvez également sélectionner "A specific process" pour surveiller toutes les instances d'un processus ou une unique instance (un processus spécifique avec un PID spécifique).
L'inconvénient de "A specific process" pour une unique instance est qu'il faut recréer la règle à chaque redémarrage du processus étant donné qu'il va changer de PID.
- Sélectionnez l'application pool rencontrant le problème de crash, puis cliquez sur "Suivant >"
- Ajoutez l'exception que vous cherchez à capturer (ou celle mentionnée par l'ingénieur support) comme vous pouvez le voir dans le screenshot ci-dessous :
- Remarque : Le champ ".Net Exception Type" est Case Sensitive. Il faut donc faire attention lorsque vous rentrez le nom de l'exception
- Ajoutez le breakpoint comme vous pouvez le voir dans le screenshot ci-dessous
- Ceci permet de générer un dump dès que la commande "TerminateProcess" est remontée dans un processus sans attendre son arrêt complet
- Cliquez sur "Suivant >"
- Choisissez un nom et emplacement pour les dumps, puis cliquez sur "Suivant >"
- Mettre ces dumps sur un autre emplacement que le C:\ ne pose pas de problème
- Vérifiez qu'il y ait suffisamment d'espace disque disponible car la taille d'un dump d'un processus est égale à la taille consommée en mémoire par ce dernier
- Dans la fenêtre "Rule Completed", sélectionnez "Activate the rule now", puis cliquez sur "Terminer"
- La règle est maintenant configurée et prête à générer des dumps
- Vérifiez que son statut est "Active"
- Si ça n'est pas le cas, le service "DbgSvc" n'est surement pas démarré
- Allez dans "Outils d'administration > Services" et démarrez le
- Quand un dump sera généré, vous verrez la colonne "UserDump Count" s'incrémenter
Les dumps sont situés par défaut dans "C:\Program Files\DebugDiag\Logs\Crash rule for all IIS_COM+ related processes" ou dans "C:\Program Files\DebugDiag\Logs\Nom_De_La_Règle "
Pour retourner à l'article d'introduction sur Debug Diagnostic 1.2 cliquez ICI.
En espérant que cet article vous sera utile.
@ Bientôt
Sylvain Lecerf et L'équipe de support IIS Microsoft France