230 likes | 349 Views
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
E N D
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 (Exceptionsnongérées) • Un arrêt du processus d’exécution inexpliqué (crash de W3WP.EXE)
Préambule • 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 • Outils • 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écutionaspnet_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é • 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 • 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