web-dev-qa-db-fra.com

Pourquoi le profileur VisualVM ne profile-t-il pas mon application?

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?

31
Luke

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)?

22
Michael

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.

34
Kuba

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.

2

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

1
Somaiah Kumbera

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.

0
divanov

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.

0
TomS