Question

Je me rends compte que des questions similaires ont été posées à ce sujet avant ici sur le SO, mais permettez-moi de décrire exactement ce que je dois faire:

J'ai une série de tests qui exécutent une ligne de commande application java et je voudrais ajouter le profilage de la mémoire pour eux. Une option que je vois serait d'ajouter du code (éventuellement à l'aide des outils 3ème partie / bibliothèques) à ma demande qui fournirait un instantané de la mémoire. Une autre option serait d'utiliser un outil tiers qui gère / instruments ma demande et la machine virtuelle Java pour moi (et idéalement ne me demande pas de changer mon code). Je pense à quelque chose comme Valgrind mais pour Java. Aussi open source, si possible.

Ce que je voudrais vraiment faire est de mettre en place les tests de mémoire afin que mon utilisation de la mémoire est contrôlée à intervalles réguliers, disons que chaque seconde, et largué dans un fichier texte. De cette façon, je serais en mesure de voir si l'utilisation de la mémoire augmente / / oscillation diminue au fil du temps. Je vais aussi pouvoir calculer les pics max et min.

Quelqu'un at-il rien fait ici comme ça?

Merci d'avance.

Était-ce utile?

La solution

Avec quelque chose comme JProfiler tout ce que vous devez faire est d'ajouter certains paramètres à la machine virtuelle Java. Il utilise JVMTI.

Je pense que vous devriez lire sur profileurs et exactement ce qu'ils peuvent faire pour vous. Je suggère également la lecture sur JVMTI.

L'interface outil JVMTM (JVM TI) est une nouvelle interface de programmation native pour une utilisation par des outils. Il fournit à la fois un moyen d'inspecter l'état et de contrôler l'exécution des applications en cours d'exécution dans la machine virtuelle Java (JVM). JVM TI prend en charge toute la gamme des outils qui ont besoin d'accéder à l'autre machine virtuelle Java, y compris mais sans s'y limiter:. Le profilage, le débogage, la surveillance, l'analyse du fil, et des outils d'analyse de couverture

Note: JVM TI remplace l'interface Profiler machine virtuelle Java (JVMPI) et la machine virtuelle Java Interface de débogage (JVMDI). JVMPI et JVMDI seront supprimés dans la prochaine version majeure de J2SETM.

Autres conseils

YourKit a aussi un très bon profileur

Avez-vous vérifié

VisualVM et Eclipse Callisto ?

Un bon endroit pour commencer est de voir si votre machine virtuelle Java prend en charge « java -Xrunhprof » car cela peut générer des informations de profilage tas sans faire de votre scénario plus complexe.

Voir http://docs.oracle.com/ JavaSE / 7 / docs / technotes / échantillons / hprof.html

Vous trouverez peut-être que suffisant pour vous pour commencer.

Plusieurs tels que YourKit ont des API pour le suivi des allocations de mémoire. Une autre option ici sont des outils de surveillance tels que JXInsight  ou Glassbox ou jamon

Pour l'analyse de tas Libère le Eclipse Memory Analyzer est le meilleur outil que vous pouvez obtenir. Il est gratuit et open source, de sorte que vous pouvez automatiser l'analyse des tas dumps autant que vous voulez.

Je développer dans Eclipse, mais je Netbeans autour d'utiliser son excellent Profiler. Il est limité par rapport à certains des commerciaux, mais encore assez bon pour repérer la plupart des goulots d'étranglement

Vous pouvez utiliser jrcmd qui est une ligne de commande utilitaire qui est livré avec la machine virtuelle Java JRockit. Si vous connaissez le pid du processus Java, vous pouvez juste faire:

JROCKIt_HOME\bin\jrcmd <pid> print_object_summary

et il vous donnera:

31.8% 3198k    41907   -137k [C
11.9% 1196k      300     +0k [B
11.4% 1151k    49118     +6k java/lang/String
 6.1% 612k     5604     +0k java/lang/Class
 4.3% 431k     2388     +0k [I
 3.5% 353k    15097     +0k java/util/HashMap$Entry
 ...

En plus des réponses ci-dessus j'ai aussi apprécié l'aide profileur il y a quelques années. Je ne sais pas si cela aide.

Je recommande l'édition de production dynaTrace. outil étonnant de profil d'application de la mémoire. bas frais généraux et 100% des transactions exécutées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top