32 votes

Profil de l'exécution du programme Java dans VisualVM

En Java, le profilage, il semble que tous (gratuit) routes aujourd'hui conduire à la VisualVM profiler inclus avec JDK6. Il ressemble à une amende de programme, et tout le monde vante les mérites comment vous pouvez "de l'attacher à un processus en cours d'exécution" comme un élément majeur. Le problème est, ce qui semble être la seule façon de l'utiliser sur un processus local. Je veux être en mesure de commencer mon programme dans le générateur de profils, et d'en suivre la totalité de l'exécution.

J'ai essayé d'utiliser l' -Xrunjdwp option décrite dans la façon de profil de démarrage de l'application avec visualvm, mais entre les deux modes de transport (de mémoire partagée et le serveur), ce n'est pas utile pour moi. VisualVM ne semble pas avoir toute intégration avec l'ancien, et VisualVM refuse de se connecter à l' localhost ou 127.0.0.1, de sorte que le dernier n'est pas bon non plus. J'ai aussi essayé d'insérer une simple lecture de l' System.in dans mon programme pour insérer une pause dans l'exécution, mais dans ce cas, VisualVM blocs jusqu'à ce que la lecture terminée, et ne vous permet pas de démarrer le profilage jusqu'après l'exécution est en cours. J'ai aussi essayé de regarder dans le plug-in Eclipse, mais le site est plein de liens morts et le lanceur se bloque avec un NullPointerException quand j'essaie de l'utiliser.

Venant de C, cela ne semble pas être une tâche particulièrement difficile pour moi. Suis-je raté quelque chose ou est-ce vraiment impossible de demander? Je suis ouvert à toutes sortes de propositions, y compris l'aide d'un autre (également gratuit) profiler, et je ne suis pas opposé à la ligne de commande.

20voto

Amir Afghani Points 17519

Pensez à utiliser HPROF et de l'ouverture du fichier de données avec un outil comme HPjmeter - ou de la lecture du texte de fichier dans votre éditeur de texte favori.

Command used: javac -J-agentlib:hprof=heap=sites Hello.java

SITES BEGIN (ordered by live bytes) Fri Oct 22 11:52:24 2004
          percent          live          alloc'ed  stack class  rank   self  accum     bytes objs     bytes  objs trace name
    1 44.73% 44.73%   1161280 14516  1161280 14516 302032 java.util.zip.ZipEntry
    2  8.95% 53.67%    232256 14516   232256 14516 302033 com.sun.tools.javac.util.List
    3  5.06% 58.74%    131504    2    131504     2 301029 com.sun.tools.javac.util.Name[]
    4  5.05% 63.79%    131088    1    131088     1 301030 byte[]
    5  5.05% 68.84%    131072    1    131072     1 301710 byte[]

HPROF est capable de présenter l'utilisation de l'UC, allocation de tas de statistiques, et surveiller la contention des profils. En outre, il peut également signaler complet de tas de détritus et les états de tous les moniteurs et les fils dans les La machine virtuelle Java.

11voto

Vineet Reynolds Points 40529

La meilleure façon de résoudre ce problème sans avoir à modifier votre application, est de ne pas utiliser VisualVM à tous. Quant à d'autres options gratuites sont concernés, vous pouvez utiliser Eclipse TPTP ou le profileur Netbeans, ou tout ce qui vient avec votre IDE.

Si vous pouvez modifier votre demande, de le suspendre de l'etat, alors que le programme d'installation vous le profiler dans VisualVM, il est tout à fait possible de le faire, à l'aide de la VisualVM plugin Eclipse. Je ne suis pas sûr pourquoi vous obtenez le NullPointerException, car il semble fonctionner sur mon poste de travail. Vous aurez besoin de configurer le plugin en lui fournissant le chemin de l' jvisualvm binaire et le chemin du JDK; cela se fait par la visite de la VisualVM configuration de la boîte de dialogue de Windows -> Préférences -> Exécuter/Déboguer - > Démarrage -> VisualVM de Configuration (comme indiqué dans la capture d'écran ci-dessous).

Eclipse VisualVM plugin

Vous devez également configurer votre application pour la lancer avec la VisualVM lanceur, au lieu de la valeur par défaut JDT lanceur.

Tous les lancements d'applications à partir d'Eclipse, produit maintenant VisualVM de suivi de la JVM automatiquement, à condition que VisualVM est déjà en cours d'exécution. Si vous n'avez pas VisualVM en cours d'exécution, puis le plugin va lancer VisualVM, mais il permettra également de poursuivre l'exécution de l'application.

Déduire de la phrase précédente, il est évident que l'application d'un arrêt de la main() méthode avant d'effectuer tout le traitement est tout à fait utile. Mais, ce n'est pas la principale raison de la suspension de l'application. Apparemment, VisualVM ou son Eclipse plugin ne permet pas de démarrer automatiquement au démarrage de l'UC ou de la mémoire des profileurs. Cela signifierait que ces profileurs devrait être lancé manuellement, nécessitant dès lors la nécessité de suspendre l'application.

En outre, il est intéressant de noter que l'ajout de drapeaux: -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y de la JVM de démarrage ne sera pas vous aider dans le cas de VisualVM, de suspendre l'application et de la configuration des profileurs. Les drapeaux sont destinés à vous aider dans le cas des profileurs qui peut réellement se connecter à ouvrir le port de la machine, à l'aide de la JDWP protocole. VisualVM ne pas utiliser ce protocole et, par conséquent, vous devez vous connecter à l'application à l'aide JDB ou d'un débogueur distant; mais ce ne serait pas résoudre le problème avec le générateur de profils de configuration, comme VisualVM (à moins de Java 6 update 26) ne vous permet pas de configurer les profileurs sur un processus interrompu car il ne suffit pas d'affichage de l'onglet du Profileur.

4voto

Ceci est maintenant possible avec le plug-in de profileur de démarrage vers VisualVM.

3voto

Tomas Hurka Points 2439

Les conseils avec -Xrunjdwp est incorrect. Il permet seulement débogueur et avec suspend=y il attend pour le débogueur à joindre. Depuis VisualVM n'est pas débogueur, il ne vous aide pas. Toutefois, l'insertion d' System.in ou Thread.sleep() pour interrompre le démarrage et permet VisualVM, à joindre à votre demande. Assurez-vous de lire le Profilage avec VisualVM 1 et Profilage avec VisualVM 2 pour mieux comprendre profiler paramètres. Notez également qu'au lieu de profilage, vous pouvez utiliser 'Échantillonneur onglet" VisualVM, ce qui est plus approprié pour le profilage ensemble de l'exécution d'un programme java. Comme d'autres cités, vous pouvez également utiliser le Profileur NetBeans, qui appuient directement le profilage du démarrage de l'application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X