Je veux obtenir un décharge de tas (fuite de mémoire suspectée) d'un certain Java processus. Cependant, lorsque je démarre l'outil Jvisalvm, je ne peux voir aucun des exécutions Java processus.
J'ai google à ce sujet et j'ai déjà trouvé quelques articles disant que vous devez exécuter le Java processus en utilisant le même JDK que vous démarrez l'outil Jvisalvm avec pour pouvoir Soyez capable de les voir. Cependant, aussi loin que je peux voir, c'est déjà le cas. Je fais tout le monde localement (j'ai accès à distance à la machine).
Quelques choses à considérer:
Java.exe
exécutableJ'attends une copie virtualisée du serveur afin que je puisse vous tromper avec elle (il s'agit d'un serveur de production). Mais dans le même temps; Des idées sur la raison pour laquelle je ne peux voir aucun des processus de Jvisualvm (ou JConsole pour cette affaire)?
Bien après avoir fait une petite recherche, il semblerait que le commentaire de Peter était correct. Étant donné que les processus JVM ont été lancés par un autre utilisateur (le compte de service réseau car ils ont été démarrés par un service Windows), ils ne sont pas apparus dans Jvisalvm.
Étant donné que j'ai accès à la configuration de l'application, j'ai trouvé la solution de contournement suivante, qui implique explicitement l'activation de JMX non sécurisée pour la cible JVM:
Ajoutez les paramètres JVM suivants:
-Dcom.Sun.management.jmxremote.port=3333 -Dcom.Sun.management.jmxremote.ssl=false -Dcom.Sun.management.jmxremote.authenticate=false
Ajoutez le processus distant à Jvisalvm à l'aide de JMX par clic Fichier -> Ajouter une connexion JMX. Vous pouvez vous connecter au processus à l'aide du port 3333. Évidemment, vous pouvez modifier le port si vous le souhaitez.
Lien vers l'article Expliquer cela dans un peu plus de détails: http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/jmx_connections.html
Le moyen le plus simple est d'exécuter Jvisalvm en tant qu'administrateur (Win: "Exécuter en tant qu'administrateur"). Ce qui n'est pas idéal mais fonctionne. Tous Java processus sont visibles alors.