9
votes

Comment puis-je profiler une application ASP.NET en cours d'exécution sur un serveur de production?

J'ai une application ASP.NET qui consiste systématiquement à 75% à 100% de la CPU sur un serveur de production. Comment puis-je profiler l'application pour déterminer quelle partie du code utilise le plus de la CPU? J'ai examiné quelques outils différents (XTE PROFiler, EQATEC, DOTTRACE), mais ils semblent tous vouloir que vous chargez de charger et de gérer l'application dans leur outil. Il me semble qu'ils veulent que vous chargez l'application dans leur outil et exécutez des tests localement (pas en production). Je veux profiler la demande lorsqu'elle fonctionne en production avec des personnes qui le frappent pour voir ce qui se passe réellement. Est-ce possible?

Je suis un nouveau profilage de l'application, ce qui me pardonne si j'ai manqué quelque chose d'évident ou que je ne pense pas à cela correctement.

merci, Corey


0 commentaires

7 Réponses :


1
votes

Je suppose que cela a à voir avec des requêtes de base de données longues plutôt que de l'application ASP.NET elle-même. Dans mon expérience 9 fois sur 10, c'est ce que je vois et cela prend le serveur d'applications jusqu'à une analyse, car les ressources sont consommées et que l'application doit attendre que chaque requête ait fini pour passer à autre chose. Jetez un coup d'œil à SQL Profilier sur le serveur DB et voyez s'il existe des questions qui prennent beaucoup de temps à exécuter.

Cela pourrait être aussi simple que d'ajouter un index à une colonne ou d'autres petites optimisations mineures. Une fois que vous connaissez la requête, vous pouvez également revenir à votre code et modifier également cette section.


1 commentaires

Eh bien, la machine SQL Server fait à peine n'importe quoi. La RAM et la CPU et la performance globale du serveur de base de données conviennent parfaitement. Je pense donc que ce n'est pas du tout un problème de DB.



0
votes

Votre meilleur pari est de profiler votre code sur votre propre machine pour identifier où il passe du temps.

Prenez un essai gratuit de dix jours de ceci:

http://www.jetbrains.com/profiler/

Voici quelques liens pour vous faire allonger:

LINK

http://msdn.microsoft. com / fr-nous / bibliothèque / ms178643 (v = vs.100) .aspx

http://www.codeproject.com/kb/aspnet/10aspnetperformance.aspx


3 commentaires

Il est préférable de créer un environnement de mise en service duplication de la production et de tester


Je suis d'accord. Cependant, il est également correct de tester les goulots d'étranglement sur votre machine de développement tant que vous faites attention.


Je ne suis pas d'accord. On peut dupliquer l'environnement dans un environnement de mise en scène, mais on ne peut pas dupliquer le comportement. Un site peut se comporter de manière différente lors de la réception de 10 demandes de recevoir 100 demandes à la fois. Par exemple, j'ai un site qui reçoit des demandes d'appareils biométriques dans les systèmes de fréquentation de temps que j'ai développés. Lorsque je teste le système dans la machine de développement ou une machine de stadification, cela fonctionne comme un charme, mais lorsqu'il a reçu des demandes de plusieurs appareils à la fois, j'ai des problèmes. Afin de simuler le comportement réel des personnes et des appareils, ce serait presque un nouveau projet,



2
votes

Vous devriez envisager de prendre un dépotoir de mémoire sur le serveur de production alors qu'il connaît un processeur élevé. Découvrez Adplus et prendre une décharge sur le processus ASP.NET. Cela peut ensuite être analysé avec WINDBG ou d'autres outils.

Je viens de traverser une expérience similaire où nos serveurs de production connaissaient une charge excessive de CPU - un scénario que nous ne pouvions pas recréer localement ou dans des environnements de test / de stadification. Cela n'avait rien à voir avec la base de données (la CPU de la base de données était normale). Analyser le fichier de vidage est ce qui nous concernait sur ce qui causait le problème (la compilation excessive d'objets de regex par certaines bibliothèques utilisées).

Cette réponse serait incomplète sans TESS 'Blog , alors voici le lien.


1 commentaires

Hmmm..yes, nous l'avons fait hier. Mais je ne savais pas comment l'analyser. Peut-être que j'ai juste besoin d'en apprendre davantage sur Adplus et Windbg, parce que je me sentais vraiment comme si je ne savais pas exactement ce que je faisais. Merci.



0
votes

Il est certainement possible de profiler ASP.NET avec le profileur EQATEC. Voir:
profilez des sites Web ASP.NET avec EQATEC Profiler

Instruments de profileur EQATEC Votre application dans une étape séparée permettant à l'application elle-même de collecter ses propres informations de profilage et que le profileur affiche ensuite que les données de synchronisation sont ensuite.

Cela signifie que vous pouvez exécuter votre application asp.net instrumentée complètement indépendante du profileur lui-même. Vous pourriez par exemple Instrument votre application, envoyez-la à votre site de test en Inde, faites-leur l'exécuter sur leur serveur pendant quelques jours où il générera des rapports de synchronisation tout seuls et les avoir envoyés par courrier à vos rapports, que vous pouvez ensuite consulter le profileur. Assez soigné.

Remarque: Pour que l'application profilée générer des instantanés de synchronisation, il faut savoir quand les générer. Par défaut, c'est lorsque la méthode Application_end est appelée dans une application ASP.NET. Vous pouvez programmer programmatiquement des instantanés lorsqu'il vous convient à l'aide de l'API EQATEC Profiler. Voir le Guide de l'utilisateur ou consulter Ce fil .


0 commentaires

8
votes

Sam Saffron (l'un des créateurs Stackoverflow) a écrit un excellent outil de ligne de commande il y a un moment, mais malheureusement l'a abandonné.

Un de mes amis a forcé le code pour le faire fonctionner en 2015:

https://github.com/jitbit/cpu-analyzer

(la page a un lien vers la publication de Sam expliquant comment l'utiliser)

La grande chose à propos de cet outil (en plus de la portabilité de «non-installation requise», une interface cmd-line, etc., etc.) est que les packages APM comme NewRelic, etc. Seulent uniquement les demandes HTTP. Si votre application a des fils de fond - ils ne vous aideront pas beaucoup.


0 commentaires

1
votes

Pour ceux qui tombent sur cette question, cela dépend vraiment de ce que vous essayez d'accomplir.

Si un serveur est en cours d'exécution sur la CPU, un profileur standard l'apportera à une halte de meulage en raison de ses frais généraux supplémentaires.

Il y a en fait trois types de profileurs différents. Profileurs standard, profileurs de transaction légère et outils APM. Vous pouvez en savoir plus à ce sujet dans mon poste de blog qui discute de tous les 3:

Profilers .NET: 3 types et pourquoi vous avez tous besoin


0 commentaires