J'ai créé un simple fichier 1 Java application qui itère à travers une boucle, appelle des fonctions, alloue de la mémoire, ajoute des nombres, etc. Je lance cette application via le Run As->Java Application
.
L'application en cours d'exécution apparaît dans Java VisualVM sous Local
.
Je double-clique sur cette application et accède à l'onglet Profiler.
Les paramètres par défaut sont:
Start profiling from classes: my.main.package.**
Do not profile classes: Java.*, javax.*, Sun.*, sunw.*, com.Sun.*
Je clique sur CPU
. Les boutons CPU
et Memory
sont grisés. Rien ne se passe.
Status
indique profiling inactive
.
Lorsque mon application se termine, le Status
dit application terminated
.
Qu'est-ce que je fais mal ici? Y a-t-il des paramètres que je dois modifier? Dois-je définir un indicateur VM lorsque je lance mon application?
Je suppose que le problème est lié au démarrage de l'application depuis Eclipse, car JVisualVM s'attend à trouver des données dans le Java.io.tmpdir
répertoire (généralement C:\Users\[your username]\AppData\Local\Temp\hsperfdata_[your username]
sur un système Windows).
I supposez plutôt que dans l'emplacement normal où JPS, JVisualVM etc. l'attend, Eclipse place les données dans son propre dossier temporaire?
Si tel est le cas, essayez d'appeler JVisualVM à l'aide de jvisualvm -J-Djava.io.tmpdir=[Eclipse's temp directory]
pour lui indiquer explicitement où se trouvent ces données.
Si vous ne trouvez pas le hsperfdata_$USER
, essayez d'exécuter votre application en dehors d'Eclipse dans la ligne de commande habituelle Java way.
Notez également qu'un bogue affectant le dossier temporaire (sensibilité à la casse) a été introduit vers 1.6.0_23, alors vous pourriez peut-être en bénéficier en mettant à jour vers une version plus récente Java 6 (ou 7)?
J'ai eu le même problème après la mise à jour Java 1.7.0_45. J'ai dû supprimer le dossier suivant:
C:\users\'username'\AppData\Local\Temp\hsperfdata_'username'
Après cela, tout fonctionne comme un charme.
Mikaveli, Kuba et Somaiah Kumbera ont fourni d'excellentes solutions. J'ajoute juste ce que j'ai fait pour que les choses fonctionnent.
J'ai d'abord vérifié l'emplacement C:\users\'username'\AppData\Local\Temp\hsperfdata_'username'
Il n'y avait aucun fichier nommé avec l'ID de processus de mon programme exécuté dans Eclipse.
J'ai simplement arrêté le programme et ajouté le paramètre suivant aux configurations d'exécution du programme (Configurations d'exécution -> Arguments -> VM Arguments)-Djava.io.tmpdir=C:\users\'username'\AppData\Local\Temp\hsperfdata_'username'
J'ai relancé le programme. Je ne pouvais toujours pas le profiler. Mais maintenant, j'ai un fichier créé pour le processus dans le répertoire temporaire donné.
Ensuite, un simple redémarrage de VisualVM a fait l'affaire.
J'ai eu le même problème, mais avec les symptômes suivants:
J'ai commencé jetty, avec le répertoire de travail dans C:\Users\t852124\AppData\Local\Temp
Jetty était en train de créer le répertoire hsperfdata_ mais sans y définir un ID de processus
Donc, quand j'ai commencé visualVM, il n'a pas pu obtenir d'informations sur le processus Java.
J'ai résolu ce problème en démarrant jetty avec l'option -Djava.io.tmpdir = C:/temp/Java.
Maintenant, quand j'ai commencé jetty, l'ID de processus a été créé sous forme de fichier dans le répertoire hsperfdata_. Donc, quand j'ai commencé visualVM, il a pu voir mon processus local Java
Sous Linux avec VisualVM 1.3.3, je dois supprimer les paramètres locaux de l'application dans ~/.visualvm/1.3.3/
pour activer CPU Profiler et CPU Sampler.
Notez également que/usr/bin/jvisualvm contient un chemin codé en dur vers OpenJDK (défini avec la variable jdkhome
), ce qui semble causer beaucoup de problèmes, par rapport à l'exécution vers Oracle JDK 1.7.
J'ai eu le même problème et l'exécution de VisualVM avec des privilèges élevés (droits d'administrateur) a résolu le problème.