Profileur de performances pour une application java


J'ai besoin d'optimiser une application Java. Il fait quelques appels tiers. J'ai besoin d'un bon outil pour mesurer avec précision le temps pris par les appels d'API individuels. Pour donner une idée de la complexité- l'application prend un fichier source de données contenant 1 million de lignes, et il faut environ une heure pour terminer le traitement. Dans le cadre du traitement , il effectue des appels tiers (y compris certains appels réseau). J'ai besoin d'identifier les appels prennent plus de temps que les autres, et sur cette base, trouver un moyen d'optimiser l'application.

Toute suggestion serait appréciée.

Author: Varun Achar, 2010-06-14

8 answers

Je peux recommander JVisualVM. C'est un excellent outil de surveillance / profilage fourni avec le JDK Oracle/Sun. Lancez-le, connectez-vous à votre application et démarrez le profilage CPU. Vous devriez obtenir de grands histogrammes sur l'endroit où le temps est passé.

Mise en route avec VisualVM a un grand écran-cast vous montrant comment travailler avec elle.

Capture d'Écran:

Capture d'écran VisualVM


Une autre alternative plus rudimentaire consiste à utiliser la commande -Xprof option de ligne:

-Xprof

Profile le programme en cours d'exécution et envoie des données de profilage à la sortie standard. Cette option est fournie comme un utilitaire qui est utile dans le développement de programmes et n'est pas destiné à être être utilisé dans les systèmes de production.

 27
Author: aioobe, 2017-08-23 20:38:58

J'ai utilisé YourKit quelques fois et ce qui est très heureux avec elle. Je n'ai cependant jamais profilé une opération de longue durée.

Le traitement est-il le même pour chaque ligne? Auquel cas, la taille du fichier d'entrée n'a pas vraiment d'importance. Vous pouvez profiler un sous-ensemble pour déterminer quels appels sont coûteux.

 7
Author: ewernli, 2010-06-14 07:39:00

Je voulais juste mentionner l'outil inspectIT. Il est récemment devenu complètement open source ( https://github.com/inspectIT/inspectIT). Il fournit un graphique d'appel complet et détaillé avec des informations contextuelles, il existe de nombreux capteurs prêts à l'emploi pour les appels de base de données, la surveillance http, les exceptions, etc.

Coutures parfaites pour votre cas d'utilisation..

 5
Author: Ivan Senic, 2015-08-17 12:31:20

Essayez le logiciel Panorama d'OPNET

 2
Author: Andy Fields, 2010-06-21 05:08:01

Il semble qu'un profileur normal ne soit peut-être pas le bon outil dans ce cas, car ils sont orientés vers la mesure du temps CPU pris par le programme profilé plutôt que des API externes qu'il appelle, et ils ont tendance à encourir une surcharge élevée et à collecter une grande quantité de données qui submergeraient probablement votre système s'il restait en

Si vous avez vraiment besoin de collecter des données de performances sur une si longue période, et principalement pour les appels externes, alors Perf4J est probablement un meilleur outil.

 1
Author: Michael Borgwardt, 2010-06-14 07:51:57

Dans notre bureau, nous utilisons YourKit profiler au jour le jour. Il est vraiment léger et sert la plupart des cas d'utilisation liés aux performances que nous avons eus.

Mais j'ai également utilisé Visual VM. C'est gratuit et rapide. Vous pouvez d'abord essayer Visual VM avant d'aller vers YourKit (YourKit n'est pas freeware).

 1
Author: arcamax, 2010-06-14 08:37:21

Visualvm (partie du SDK) et Java 7 peuvent produire un profilage détaillé.

 0
Author: s5804, 2010-06-14 07:42:51

J'utilise profiler dans NetBeans (il est vraiment brillant et déjà intégré, pas besoin d'installer de plugin) ou JVisualVM lorsque vous n'utilisez pas NetBeans.

 0
Author: Xorty, 2010-06-14 08:53:19