Application Java de profilage


Je suis à la recherche d'un profileur de code Java que je peux utiliser pour profiler mon application (c'est un service qui s'exécute en backend) sur la production (donc signifie bas sur la tête, et il ne doit pas ralentir mon application). Principalement je veux appeler l'arbre de profilage, c'est si un() appelle b (), puis b() appelle c(), alors combien de temps a() b() et c() prend, à la fois inclusive et exclusive.

Ont vu jvisualvm et jprofiler, mais ce n'est pas ce que je recherche, car je ne peux pas lier mon application de production pour eux car cela causera un problème majeur de performance.

Aussi, je suis passé par metrics (https://github.com/dropwizard/metrics), mais cela ne me donne pas de fonctionnalité pour profiler l'arbre appelant.

Callgrind (http://valgrind.org/docs/manual/cl-manual.html ) la bibliothèque de types est ce dont j'ai besoin, car elle donne des fonctionnalités de profilage d'arborescence d'appel et des options avancées comme éviter les cycles d'appel (récursivité). Mais je ne suis pas sûr que Callgrind puisse être utilisé en production car décharge les données lorsque le programme se termine.

Quelqu'un peut-il suggérer un bon profileur d'arbre d'appel pour java qui peut être utilisé en production sans compromettre les performances?

Author: kc2001, 2014-03-07

4 answers

Prendre un coup d'oeil à Java Mission de Contrôle conjointement avec Enregistreur de Vol. À partir de la sortie d'Oracle JDK 7 Update 40 (7u40), Java Mission Control est fourni avec la JVM HotSpot, il est donc hautement intégré et prétend avoir de petits effets sur les performances d'exécution. Je viens juste de commencer à le regarder, et je vois une fonctionnalité d'arborescence d'appels.

entrez la description de l'image ici

 12
Author: kc2001, 2016-12-01 18:56:38

En général, vous ne (ou je ne recommanderai pas) les profileurs qui instrumentent votre application. Instrumenter signifie toujours une surcharge de production incontrôlable.

Que vous pouvez utiliser est un profileur d'échantillonnage. Un profileur d'échantillonnage crée un instantané des traces de pile à un intervalle contrôlable. Ce que vous n'obtenez pas, c'est le nombre d'appels, mais, après un certain temps d'exécution, vous obtenez un bon aperçu des points d'accès. Puisque vous pouvez ajuster l'intervalle d'échantillon du profileur vous pouvez influencer la surcharge de il.

Un profileur d'échantillonnage utilisable est livré avec le JDK, voir la page hprof dans la documentation java 7. Autrefois, il existait des outils d'analyse graphique pour les traces de cpu hprof (pas les traces de tas). Maintenant, ils sont partis. Cependant, vous pouvez déjà travailler avec le fichier texte généré.

J'ai jeté un coup d'oeil rapide sur les trucs de contrôle de mission Java mentionnés ci-dessus. Je pense qu'il est assez puissant satisfaire beaucoup de besoins, dans le livre blanc, ils disent qu'il n'en a que 2% généraux. Cependant, ce n'est pas totalement ce dont j'ai personnellement besoin ou envie. Pour mes applications, il est préférable d'avoir un profilage" léger " activé tout le temps.

 9
Author: cruftex, 2014-03-12 09:09:00

Amplificateur Intel XE http://software.intel.com/en-us/intel-vtune-amplifier-xe a une faible surcharge si elle est perceptible. Il utilise la technologie d'échantillonnage de pile pour minimiser l'impact et il peut se fixer et se détacher pour exécuter des processus non-stop en production. Vous n'avez même pas besoin d'avoir des sources pendant le profilage, vous pouvez plonger dans les sources plus tard après la navigation des résultats de performance hors ligne.

 4
Author: Andrew, 2014-03-08 07:38:11

Je ne connais aucun outil capable de faire du profilage sans impact sur les performances.

Vous pouvez ajouter la journalisation aux méthodes qui vous intéressent. Assurez-vous d'inclure l'horodatage dans le journal, alors vous pouvez faire le calendrier. Vous devez également configurer le cadre de journalisation pour qu'il se connecte de manière asynchrone afin de réduire la perte de performances.

Un weaver de temps de chargement comme AspectJ est capable d'ajouter ces appels à l'exécution, ce qui vous permettrait de sélectionner facilement les méthodes que vous souhaitez surveiller sans changer le code source tout le temps.

En utilisant un aspect around, vous pouvez même ajouter une journalisation de synchronisation, vous n'avez donc pas besoin d'analyser les journaux et d'essayer de trouver les entrées de journal correspondantes. Voir cet article de blog pour plus de détails .

Jetez un oeil à perfspy (tutoriel), il pourrait déjà faire hors de la boîte ce dont vous avez besoin.

Lié:

 1
Author: Aaron Digulla, 2017-05-23 11:53:24