23
Débogage d'applications ASP .NET en production Sébastien Bovo Support Développeurs - Microsoft France [email protected] http://blogs.microsoft.fr/sbovo/

Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France [email protected]@microsoft.com – //blogs.microsoft.fr/sbovo

Embed Size (px)

Citation preview

Page 1: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

Débogage d'applications ASP .NET en production

Sébastien BovoSupport Développeurs - Microsoft [email protected] – http://blogs.microsoft.fr/sbovo/

Page 2: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //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

Page 3: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

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)

Page 4: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

Préambule

ProblèmeNon 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 ?

1. Capture d’informations

2. Analyse ultérieure

Page 5: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

Outils – capture d’informations

OutilsMoniteur de performance

Journaux d’évènements

Prise de dumpsAdplus.vbs

-hang

-crash

Debugdiag

Outils pour l’analyseWinDbg

Extensions WindDbg comme SOS

Page 6: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

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

Page 7: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

Outils – Analyse

OutilsWinDbg

Extensions WindDbg comme SOS

Page 8: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

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

Page 9: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

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

Page 10: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

Présentation de WinDbg et SOS

kp Affiche la pile d’appel de tous les threadsQue 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

Page 11: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

IIS

Processus d’exécutionaspnet_wp.exe (IIS5) ou w3wp.exe (IIS6)

ASP.NET runtime dans .NET CLRinetinfo.exe (IIS5)

HTTP pipelineaspnet_isapi.dll

(code natif)

aspnet_isapi.dll(code natif)

http.sys: driveren mode kernel (IIS 6)

HttpApplication\vdir1

HttpApplication\vdir2

Page 12: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

CLR

Il n’existe pas de processus managéUn processus Win32 charge le runtime .NET

Dans un processusPlusieurs AppDomains = séparations logiques

1 AppDomain plusieurs threads

1 Thread plusieurs AppDomains

Page 13: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

CLR

En ASP.NET, 1 application = 1 AppDomain

HeapsObjets managés

Garbage CollectorGénérations

Compactage

large objects heap

Page 14: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

Commandes SOS

!DumpHttpRuntime Applications ASP.NET

!FindDebugTrue Applications qui ont debug=true

!FindDebugModules Modules/dlls compilés en mode debug

Page 15: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

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

Page 16: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

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

Page 17: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

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

Page 18: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

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

Page 19: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

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 performanceSi « Process/Virtual Bytes » et « .net CLR Memory/# Bytes in all Heaps » suivent la même progression…

Fuite mémoire d’objets managés

Page 20: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

Ressources

Téléchargement de WinDbg - http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx

Page 21: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

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

Page 22: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

Ressources

Compteurs de performanceOptimizing IIS 6.0 Performance (IIS 6.0) – http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/e621190d-1015-40c2-a5ec-0dcb32c98286.mspx

En particulierMonitoring 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

Page 23: Débogage d'applications ASP.NET en production Sébastien Bovo Support Développeurs - Microsoft France sbovo@microsoft.comsbovo@microsoft.com – //blogs.microsoft.fr/sbovo

Ressources

Compteurs de performanceASP.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