Performances de vos applications ASP.NET - Quels compteurs étudier ?

Les compteurs de performance sont très nombreux et l’on peut rapidement s’y perdre ou perdre son temps à tous vouloir les utiliser. Pour être le plus productif possible, je vous propose par expérience, une liste de compteurs. Vous pouvez les étudier en tout premier lieu lors de vos tests de charges. Ensuite, en fonction des résultats, vous jugerez utile d’en ajouter d’autres plus ciblés.

Voici donc une liste qui peut vous servir de point de départ :

  • .NET CLR Exceptions
    • # of Exceps Thrown/sec <<W3WP.EXE>>
  • .NET CLR Memory
    • # Bytes in all Heaps <<W3WP.EXE>>
    • % Time in GC
    • Large Object Heap size <<W3WP.EXE>>
  • ASP.NET V2
    • Requests Current
    • Worker Process Restarts
  • ASP.NET Apps V2
    • Errors Total/sec
    • Request Execution Time
    • Requests/sec
  • Processor
    • % Processsor Time _Total
  • Process
    • % Processsor Time <<W3WP.EXE>>
    • Virtual Bytes <<W3WP.EXE>>
    • Private Bytes <<W3WP.EXE>>
  • Web Service
    • Anonymous Users/sec <<NomSiteWeb>>
    • Get Requests/sec <<NomSiteWeb>>
    • Post Requests/sec <<NomSiteWeb>>

 

Pour référence, je vous conseille les deux chapitres du guide "Improving .NET Application Performance and Scalability"

Aussi, voici un point d'entrée tres interessant sur les meilleures pratiques et l'optimisation des performances

 

Par exemple, pour l'analyse des courbes obtenues, si vous regardez l’utilisation mémoire, l’important est de surveiller avant tout les compteurs "Process - Virtual Bytes <<W3WP.EXE>>" et "Process - Private Bytes <<W3WP.EXE>>" :

  • Les "Virtual Bytes" d’un processus correspondent à la mémoire réservée par ce processus. Elle est de deux types : "Reserved" et "Committed". Dans le premier cas, la mémoire n'est plus libre mais pas encore utilisée : le processus se réserve le droit d'y placer des données. La mémoire "Committed" est allouée et utilisée : elle est pris sur la mémoire physique du serveur.
  • Les "Private Bytes" d'un processus représentent la mémoire réellement utilisée et prise sur la mémoire physique. Autrement dit : il s'agit la partie "Committed" des "Virtual Bytes"

Par conséquent, si un de ces deux compteurs est en constante augmentation sans jamais redescendre, vous avez une fuite mémoire. Dans ce cas, d'autres compteurs pourront vous aider. Par exemple :

  • ".NET CLR Memory - # Bytes in all Heaps <<W3WP.EXE>>" donne la taille mémoire utilisée par tous les objets .NET contenus dans le processus W3WP.EXE sélectionné. Si ce compteur augmente aussi de la même manière, la fuite mémoire est provoquée par les objets managés utilisés
  • "Large Object Heap size <<W3WP.EXE>>" comprend seulement les objets .NET dits volumineux (supérieurs à 85 ko). La mémoire utilisée par ces objets est particulière parce qu'elle n'est pas compactée/optimisée lors du passage du garbage collector. Son utilisation intensive peut provoquer de la fragmentation mémoire

 

Bon tests ou surveillances de vos applications ASP.NET :-)

A bientôt,

Sebastien.