Cet article détaille le plan d'action à mettre en place pour créer une règle dans Debug Diagnostic afin d'automatiser la génération d'un dump lors d'une forte consommation mémoire générée par du code non-managé au sein d'un processus relatif à IIS (typiquement un processus "W3WP.exe").

Cette catégorie de dump implique de savoir si la mémoire consommée est de la mémoire virtuelle ou physique. Si vous avez un doute à ce sujet, je vous conseille de lire l'article Mémoire & Recyclage sous IIS 6 qui explique la différence.

Plan d'action

!!! Attention !!! Un dump en mode "Memory Leak" implique le chargement de la DLL "Leaktrack.dll" dans le processus "W3WP.exe". Cette DLL va enregistrer les allocations/libérations mémoires et peut impacter les performances du serveur et donc de l'application
!!! Attention Bis !!! Cette règle ne s'attache qu'à un processus unique. Cela sous-entend que si le processus est redémarré (changement de PID du processus), la règle ne sera plus active.

  • Debug Diagnostics est disponible à 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 "Native (non-.NET) Memory and Handle Leak", puis cliquez sur "Suivant >"

                

                

  • Configurez ensuite la fenêtre "Configure Leak Rule" comme suit :

                

  • Explications :
    • "Start memory tracking immediately when rule is activated" = DebugDiag commencera à enregistrer les allocations mémoire dès l'activation de la règle
    • "Auto-unload LeakTrack when rule is completed or deactivated" = Debug Diag va s'occuper de décharger automatiquement LeakTrack quand on aura terminé la prise de dumps   

 

  • Cliquez sur "Configure…" et configurez "Configure userdumps for Leak Rule" comme suit si c'est la mémoire privée qui est impactée par la fuite mémoire :

                

  • Cliquez sur "Configure…" et configurez "Configure userdumps for Leak Rule" comme suit si c'est la mémoire virtuelle qui est impactée par la fuite mémoire :

                

  • Explications :
    • "Auto-create a crash rule to get userdump on unexpected process exit" = Si le processus se recycle ou plante, un dump sera alors automatiquement généré
    • "Generate a userdump when Private bytes reach 800 Mb" = Quand les private bytes atteindront 800 Mb, un dump sera automatiquement généré
    • "and each additional 200 Mb therafter" = Tous les 200 Mb (en plus des 800 Mb initiaux) un nouveau dump sera automatiquement généré. (En l'occurrence quand la mémoire atteindra 1 Gb)
    • Les deux options en-dessous sont exactement les mêmes pour les virtual bytes. Il est préférable de n'activer qu'un seul paramètre à la fois d'où l'intérêt de savoir quel type de mémoire (virtuelle ou physique) est en cause dans la fuite mémoire.
  • Cliquez sur "Save & Close", puis 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\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