Débogage d'applications ASP .NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.com – http://blogs.microsoft.fr/sbovo/
Agenda Préambule Outils pour la capture et l’analyse Présentation de WinDbg et SOS IIS et CLR Commandes SOS Exemples de problématiques
Préambule Comportement anormal d’une application ASP.NET mise en pré production ou production : Un état de blocage ou d’attente qui empêche le traitement des requêtes (deadlock ou hang du processus d’exécution) 100% CPU du processus d’exécution Apparition de messages d’erreurs aux utilisateurs alors qu’aucune exception n’est loguée (Exceptions non gérées) Un arrêt du processus d’exécution inexpliqué (crash de W3WP.EXE)
Préambule Problème Comment faire pour trouver l’origine du problème ? Non identifié au préalable lors du développement et de la phase de tests Ne pouvant être reproduit sur une autre plateforme Comment faire pour trouver l’origine du problème ? Capture d’informations Analyse ultérieure
Outils – capture d’informations Moniteur de performance Journaux d’évènements Prise de dumps Adplus.vbs -hang -crash Debugdiag Outils pour l’analyse WinDbg Extensions WindDbg comme SOS
Outils – capture d’informations Qu’est-ce qu’un dump de mémoire ? Capture de l’espace d’adressage d’un processus Pourquoi est-ce utile ? Etat des threads Piles d’appels Objets en mémoire Modules chargés
Outils – Analyse Outils WinDbg Extensions WindDbg comme SOS
Présentation de WinDbg et SOS Qu’est ce que WinDbg ? Le débogueur le plus utilisé chez Microsoft Débogage User et Kernel Peut être étendu en écrivant des extensions Qu’est ce que SOS ? Extension WinDbg Connait les structures mémoires interne utilisées par .NET
Présentation de WinDbg et SOS Chargement des symboles .sympath SRV*c:\symbols*http://msdl.microsoft.com/download/symbols .reload Chargement de l’extension SOS .load clr10\sos.dll Ou .loadby sos mscorlib.dll !help
Présentation de WinDbg et SOS kp Affiche la pile d’appel de tous les threads Que fait le processus au moment de la prise de dump ~*kp Pour tous les threads ~1s Changement de thread !clrStack Montre la partie managée du thread ~*e !clrStack Pour tous les threads
IIS Processus d’exécution aspnet_wp.exe (IIS5) ou w3wp.exe (IIS6) ASP.NET runtime dans .NET CLR inetinfo.exe (IIS5) HttpApplication \vdir1 aspnet_isapi.dll (code natif) HTTP pipeline HttpApplication \vdir2 http.sys: driver en mode kernel (IIS 6) aspnet_isapi.dll (code natif)
CLR Il n’existe pas de processus managé Dans un processus Un processus Win32 charge le runtime .NET Dans un processus Plusieurs AppDomains = séparations logiques 1 AppDomain plusieurs threads 1 Thread plusieurs AppDomains
CLR En ASP.NET, 1 application = 1 AppDomain Heaps Garbage Collector Objets managés Garbage Collector Générations Compactage large objects heap
Commandes SOS !DumpHttpRuntime Applications ASP.NET !FindDebugTrue Applications qui ont debug=true !FindDebugModules Modules/dlls compilés en mode debug
Commandes SOS !threads Indique les threads managés !ASPXPages Parse les threads pour dire lesquels sont relatifs à l’exécution de pages ASPX !runaway Montre le temps CPU pour chacun des threads
Commandes SOS !eeheap -gc Taille des heaps du Garbage collector !eeheap -loader Assemblées chargées !DumpHeap Affiche les objets managés -stat -mt -min
Commandes SOS !dumpobj Donne l’objet managé !dumpallexceptions Fournit toutes les exceptions du dump !gcroot indique qui maintient une référence sur l’objet
Exemples de problématiques Application ASP.NET présentant des problèmes de performances important Le temps de réponse s’écroule avec la charge utilisateur Non Réponse du serveur dans certains cas Le problème disparait avec un charge moins importante
Exemples de problématiques Exemple d’application ASP.NET ayant un fuite mémoire La taille du processus W3WP.EXE ne cesse d’augmenter A partir des compteurs de performance Si « Process/Virtual Bytes » et « .net CLR Memory/# Bytes in all Heaps » suivent la même progression… Fuite mémoire d’objets managés
Ressources Téléchargement de WinDbg - http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
Ressources Troubleshooting ASP.NET using WinDbg and the SOS extension - http://support.microsoft.com/?id=892277 Reference SOS - http://msdn2.microsoft.com/en-us/library/ms404370.aspx
Ressources Compteurs de performance Optimizing IIS 6.0 Performance (IIS 6.0) – http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/e621190d-1015-40c2-a5ec-0dcb32c98286.mspx En particulier Monitoring ASP.NET Performance (IIS 6.0) - http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/97d0872a-96b3-41e4-8997-b174a9dbb87f.mspx?mfr=true Controlling Memory Usage (IIS 6.0) - http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/ad56540c-2323-4316-b981-7ebb70352baa.mspx
Ressources Compteurs de performance ASP.NET Performance Counters (IIS 6.0) - http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/a8c5b994-7722-4dc6-a246-7dfe667c6816.mspx?mfr=true Performance Counters for ASP.NET - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconmonitoringaspnetapplicationperformance.asp?frame=true