web-dev-qa-db-fra.com

Jvisalvm ne répertorie pas certains Java processus

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:

  1. Les processus sont en cours d'exécution sur un serveur Windows 2008 pare-feu
  2. Les processus fonctionnent en utilisant renommé versions de la JDK Java.exe exécutable
  3. Autant que je puisse voir, les processus fonctionnent à l'aide du 1,6.0_18 JDK
  4. L'un des processus de course commence un registre RMI

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

37
tmbrggmn

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.

Workaround

É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:

  1. Ajoutez les paramètres JVM suivants:

    -Dcom.Sun.management.jmxremote.port=3333 -Dcom.Sun.management.jmxremote.ssl=false -Dcom.Sun.management.jmxremote.authenticate=false

  2. 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

Remarques

  1. C'est probablement non une bonne idée de conserver les paramètres JVM de manière permanente, car ils permettent à quiconque de se connecter à la JVM via JMX.
  2. Vous pouvez également ajouter une authentification aux paramètres JMX JVM si vous le souhaitez.
55
tmbrggmn

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.

4
Wooff