VisualVM "n'est pas supporté pour cette JVM" sur toutes les applications locales?
j'ai déjà passé beaucoup de temps à charger et tester mon application, j'ai besoin maintenant de profil. Mais malheureusement, le VisualVM dit toujours "pas pris en charge pour cette JVM" sur mes applications locales?
les applications ont été lancées sur la même JVM avec VisualVM.
13 réponses
j'ai découvert que (au moins sous Windows) on peut facilement écrire de petits fichiers batch pour exécuter VisualVM en combinaison avec des JVM spécifiques, ce qui est important pour moi, puisque j'ai installé le JDK 32bit avec le JDK 64bit (j'ai besoin des deux, donc c'est raisonnable pour moi). J'ai créé deux fichiers batch dans le dossier "S:\applications\visualvm\bin\":
run_32.chauve-souris:
@echo off
START "VisualVM 32" visualvm.exe --jdkhome "C:\Program Files (x86)\Java\jdk1.7.0_07"
run_64.chauve-souris:
@echo off
START "VisualVM 64" visualvm.exe --jdkhome "C:\Program Files\Java\jdk1.7.0_07"
bien Évidemment, tous les chemins peuvent différer sur votre système, mais l'idée générale devrait toujours fonctionner correctement (sur toutes les versions 64bit de Windows). L'avantage est que je peux utiliser le fichier batch 32bit quand je veux utiliser VisualVM en combinaison avec des applications Java qui tournent sur le JVM 32bit, et ainsi de suite pour 64bit.
la commande "Démarrer" a le seul avantage que le fichier batch lance l'application sans attendre qu'elle finisse, donc la fenêtre de l'invite de commande se ferme immédiatement. Ce n'est pas une caractéristique de VisualVM, mais du lot Windows interpréteur de fichier.
VisualVM doit être exécuté avec la même JVM - au moins Java 6 avec la même taille 32 bits/64 bits-que le programme à profiler. (Vous devez également être le même utilisateur, mais alors, ce message ne s'applique pas).
je vérifierais une fois de plus que c'était exactement la même JVM dans votre situation.
dans mon cas, même avec la correspondance JVMs (les deux 64 bits), la seule façon de faire fonctionner les choses était d'envoyer l'argument -Dcom.sun.management.jmxremote
à la JVM à surveiller. Cela fonctionne également si vous avez des problèmes de connexion via Java Mission Control (JMC).
Selon la documentation de JMX, c'est ce que fait l'argument:
paramétrage de cette propriété a enregistré le MBeans de la plate-forme Java VM et a publié le connecteur Remote Method Invocation (RMI) via un interface privée permettant aux applications client JMX de surveiller une plate-forme Java locale, c'est-à-dire une VM Java tournant sur la même machine que le client JMX.
cela devait être activé automatiquement, mais pour une raison quelconque, ce N'était pas sur mon Linux.
Sur Linux: Assurez-vous que votre/etc / hosts renvoie correctement l'adresse ip effective de votre "nom d'hôte"." Il semble qu'une divergence ici confond totalement le pauvre jvisualvm et ses programmeurs.
j'ai aussi rencontré ce problème. Mon cas est que sur linux, j'ai démarré tomcat avec tomcat_user mais j'ai lancé jvisualvm avec root user. Cela fonctionne après que j'ai lancé tomcat avec root user.
comme vous pouvez le voir, vous utilisez VisualVM sur 32bit JVM
vous n'avez pas besoin d'unistall 32bit JVM. Dites à VisualVM d'utiliser tour 64bit JVM.
Si vous voulez le modifier de façon permanente, vous pouvez modifier
visualvm_13\etc\visualvm.conf et spécifiez le chemin de jvm ici
un problème que je viens de trouver, grâce à l'indication de @user3356656, est que si vous démarrez le programme alors que votre machine est sur une IP, et puis essayer de se connecter alors qu'il est sur une IP différente, il va échouer.
j'avais le problème d'avoir de visualvm détecter mon installation locale tomcat sur Windows 7. Je pouvais me connecter manuellement, mais alors des choses comme les instantanés de mémoire et le plugin visualgc n'étaient pas activés. J'ai confirmé que j'utilisais la même version JVM, permissions de fichiers temp, etc. N'a pas fonctionné. Puis j'ai découvert que commencer visualvm d'abord, puis tomcat, résolu le problème.
je peux reproduire le comportement suivant. J'ai une application java avec menu clic droit pour ouvrir jvisualvm. J'exécute cette application java comme setup autonome à partir d'un fichier bat. Cela signifie que je modifie %path% et d'autres variables d'environnement nécessaires comme JDK en conséquence pour former mon environnement. La BAT qui démarre l'application est marquée comme non-admin. L'environnement indique un JDK 64 bits. Puis je démarre une autre application java en tant qu'administrateur. VM vit à partir du même 64-bit JDK-source. Puis J'Ai démarrer jvisualvm à partir de la première application avec le clic droit ie.en tant que non-administrateur. Je peux voir l'application dans jvisualvm 'Applications list ‘mais cliquer sur’ System properties' donne une erreur. Message: "Not supported for this JVM". Les arguments JVM sont exposés.
la Solution est comme dans d'autres commentaires précédents: En démarrant mon jvisualvm-starter en tant qu'administrateur, je peux voir aussi "propriétés du système" . Il est certain que si JDKs était de 32 bits et d'autres 64 bits, cela ne fonctionnerait pas. été là.
je j'ai pensé que cette notion devait être ajoutée ici à cause de ce petit crétin qui travaille à moitié.
Mon problème était JVM optimisations - -XX:+PerfDisableSharedMem
drapeau cassera VisualGC. C'est évident si jps n'affichera pas votre application dans la liste.
j'ai changé le nom de mon utilisateur Windows et l'ai mis en minuscules, redémarré mon PC et tout fonctionne maintenant.
moi aussi j'ai le même problème pour tomcat local, je cherche des solutions pour stackoverflow. après quelques débogage sérieux, J'ai compris que VisualGC n'a pas les permissions pour obtenir des informations GC de l'outil.fichier jar.
liens
http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstatd.html#SECURITY https://stackoverflow.com/a/42107355/3876619
je les étapes suivantes pour résoudre le problème
1) Créer une autorisation de fichier
vim /tmp/tools.policy
Ajouter
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
save
2) Maintenant add/tmp / tools.politique relative aux paramètres de démarrage de la JVM
-Djava.security.policy=/tmp/tools.policy
3) Exécuter jvisualVm avec sudo
pour moi, la raison est que j'ai lancé le "jstatd" avec un autre utilisateur avec le processus JVM. J'ai un utilisateur spécial dans linux pour lancer le thread JVM(c'est un tomcat), mais je démarre le processus jstatd avec root. Si vous utilisez root pour exécuter jps, vous ne pouvez voir aucune information des threads JVM appartenant à d'autres utilisateurs. C'est le problème. J'ai tué le processus" jstatd "commencé par root, su par le propriétaire du processus JVM, et redémarré le processus "jstatd" et tout s'est bien passé. maintenant.