Créer une règle en mode Memory Leak avec Debug Diagnostics

Cet article détaille le plan d'actions à mettre en place pour créer une règle dans Debug Diagnostics afin d'automatiser la génération d'un dump lors d'une forte consommation mémoire d'un processus relatif à IIS (par exemple 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'actions

!!! 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

                

  • Sélectionnez le processus "W3WP.exe" rencontrant le problème de consommation mémoire, puis cliquez sur "Suivant >"

                

  • Pour trouver le processus correspondant à votre application pool
    • Ouvrez une invite de commande (CMD)
    • Allez dans "C:\WINDOWS\System32"
    • Tapez la commande suivante
      • cscript iisapp.vbs

                

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

                

  • Explications
    • "Start memory tracking immediately when rule is activated" = DebugDiag commencera à enregistrer les allocations de 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

                

  • 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 100 Mb therafter" = Tous les 100 Mb (en plus des 800 Mb initiaux) un nouveau dump sera automatiquement généré. (En l'occurrence quand la mémoire atteindra 900 Mb)
    • 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 le leak
  • 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 physique 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_Regle "

Pour retourner à l'article Debug Diagnostics & Génération de dumps cliquez ICI

 

En espérant que cet article vous sera utile.

@ Bientôt

Sylvain Lecerf et L'équipe de support IIS Microsoft France