Java profilage - comment puis-je obtenir une méthode par méthode de l'analyse de ma demande?
Je veux exécuter mon application Java et pour une charge donnée, être en mesure de voir:
- combien de fois une fonction a été appelée
- combien coûte chaque appel de fonction est, en termes relatifs (c'est à dire combien de temps prend à exécuter)
Je sais large où le col de la bouteille est dans ma demande, mais j'ai besoin d'un beaucoup plus fine de la vue afin de le réduire.
Grâce
Modifier jvisualvm ressemble à l'outil - il identifié le problème en 30 secondes environ. J'ai juste besoin de savoir quoi selftime " signifie dans le contexte d'une méthode de profil. Grâce
- Temps est le temps d'exécution, pas y compris les méthodes appelées. Exemple: la méthode
a()
effectue un calcul, et également les appels de méthodesb()
etc()
. De sorte que le temps dea()
inclure le calcul effectué para()
lui-même, mais n'inclut pas le temps passé dansb()
ouc()
. - merci, c'est ce que je pensais
- Qu'entendez-vous par 'calcul'? Toute opération avec les primitives? Comment sur la création d'un nouvel objet? Devraient-ils être inclus dans le temps?
Vous devez vous connecter pour publier un commentaire.
Approche la plus simple pour un programme en cours d'exécution dans la version 6 de java de Sun est d'utiliser le jvisualvm programme dans le jdk. Vous permet de fixer et de profil, sans aucune installation spéciale.
Plus simple est d'utiliser -prof, e.g:
java -prof -jar yourjar.jar
Qui permettra d'imprimer un fichier appelé java.prof après la fin du programme en cours d'exécution.
Voir le HPROF page de documentation
Dans mon application que j'utilise:
-Xrunhprof:cpu=échantillons,thread=y,doe=y
Ce imprime un rapport qui contient, entre autres choses, ceci:
De sorte que vous pouvez voir le total de temps (en secondes) passé dans les différentes méthodes.
Dans la mine, l'application passe le plus clair de son temps à attendre des données à partir d'un hôte distant (il n'est pas improbable via une connexion internet).
Il y a eu deux profileurs répertoriés (L'éclipse de l'un et de JProfiler). Je veux juste vous RECOMMANDONS FORTEMENT d'un profileur est l'un des outils de programmation toolchest.
C'est quelque chose que la plupart des programmeurs passer, mais un profileur peut résoudre ensemble de classes de problèmes qui sont très difficiles à résoudre autrement.
Je dis juste que (pour tout le monde, pas seulement l'interlocuteur) que si vous n'avez pas utilisé un générateur de profils aller en trouver un, de le télécharger et de l'exécuter.
Par ailleurs, ils sont beaucoup plus puissant que la statique de la sortie de java outils--bien que les outils java peut être suffisant dans ce cas précis. Un profileur peut vous dire ce que chaque thread est en train de faire et de procéder à des assez cool appeler graphique (diagramme de flux de style) qui vous aidera à analyser le code que vous n'avez pas à écrire.
Juste en trouver un, et de l'utiliser pour une semaine ou deux afin que vous sachiez ce qu'il offre.
Java 1.7* livré avec Java de Contrôle de Mission (jmc), qui a " Enregistreur de Vol, la fonction qui peut être utilisée pour le profil de l'exécution de la méthode. Profilage de l'affichage des résultats presque similaires à AppDynamics - facile de repérer les problèmes de perf (esp. quelles sont les méthodes les manger tout le CPU).
Mais pas détaillé, mais bon billet de blog expliquant le sujet de l'Enregistreur de Vol: http://hirt.se/blog/?p=364
* Pas sûr au sujet de la version mineure
Prendre un coup d'oeil à Eclipse TPTP. Ils peuvent fournir exactement cela et bien plus, pour toute application a commencé à partir d'Eclipse.
Si vous êtes prêt à dépenser un peu d'argent,
JProfiler:
http://www.ej-technologies.com/products/jprofiler/overview.html
est très bon, il vous montre % du temps utilisé, le temps absolu utilisé, et # des invocations de la méthode de niveau. Il comprend EJB appels, les appels de service web, et vous pouvez même voir le SQL d'appels jdbc. Je l'utilise fréquemment pour trouver des problèmes de performances.
Il a le profilage de la mémoire trop, mais je trouve que le cpu de profilage beaucoup plus utile.
Exactement c'est là que l'AOP aide. Les Aspects peuvent être ajoutées ou enlevées sans changer le code.
Si vous utilisez le Printemps; créer les Aspects, notamment JoinPoint, Conseils, liste des Classes et des méthodes publiques qui sont à évaluer le temps d'exécution. Ajouter ces fèves au Printemps config.
D'autre AspectJ Conteneur pour les non-printemps application