web-dev-qa-db-fra.com

VisualVM incapable d'échantillonner la mémoire

J'ai une instance de Tomcat avec le paramètre JMXRemote configuré. Le VisualVM local peut obtenir un échantillonneur sur le processeur, mais pas pour la mémoire. Le bouton de mémoire est grisé avec un résumé indiquant: "Échantillonnage de mémoire: Non disponible. Connexion impossible à l'application cible. Assurez-vous que l'application s'exécute sur un JDK 6 ou un JDK 7 pris en charge"

Paramètre JMXRemote: 

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

Version Tomcat JDK: 

JDK1.6.0.30

Version VisualVM:

Version: 1.6.0_30 (Build 1320-110325); platform 110131-9c8b3bfb3a1e
System: Windows Server 2008 R2 (6.1) , AMD64 64bit
Java: 1.6.0_30; Java HotSpot(TM) 64-Bit Server VM (20.5-b03, mixed mode)
Vendor: Sun Microsystems Inc., http://Java.Sun.com/
Environment: Cp1252; en_US (visualvm)
Userdir: C:\Users\Administrator\AppData\Roaming\.visualvm\7
Clusters: C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\platform
C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\visualvm
C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\profiler

Version Tomcat:

Tomcat 6.0.32

J'utilise à la fois VisualVM et Tomcat sur Win Server 2008. Quelque chose que j'ai fait de mal?

25
Reusable

J'ai eu le même problème avant… .. Vous devez avoir téléchargé la version depuis la page d'accueil de jvisualvm, n'est-ce pas? Ne le faites pas! Si vous utilisez le nouveau jdk 1.7, VisualVM est déjà empaqueté dans votre dossier jdk . Utilisez cette version, vous ne rencontrerez aucun problème avec l'exemple de mémoire.

7
Sifeng

Cet article de blog m'amène à penser que les répertoires temp de JVisualVM et de Tomcat doivent être identiques pour que l'échantillonnage de la mémoire fonctionne. Un des commentaires sur le post:

le répertoire temporaire doit être défini sur celui utilisé par JVisualVM, qui peut être découvert à partir de l'onglet Propriétés du système VisualVM (Java.io.tmpdir). Une fois que j'ai défini le répertoire CATALINA_TMPDIR correctement, cela a fonctionné à merveille.

5
David Minor

Je viens de rencontrer le même problème et les réponses ci-dessus ont résolu mon problème, mais il m'a fallu un certain temps pour comprendre comment. Juste au cas où quelqu'un aurait encore des problèmes et finirait si loin dans le fil, j'utilisais le JDK qui fait partie du serveur weblogic configuré via Eclipse et non le JDK que j'ai installé séparément. Je suis toujours programmeur junior et je ne mettais pas 2 et 2 ensemble jusqu'à ce que je vérifie mes paramètres Eclipse et vérifie mes JRE installés.

Ran le jvisualvm.exe de la JJK weblogic et tout a fonctionné. 

1
Alex Riccio

Je voudrais vérifier que la version de VisualVM est exactement la même que la JVM. 

VisualVM est très spécifique à la version. Je suppose que son développement est encore assez rapide. 

(Re posté comme une réponse car cela peut être la solution)

1
Peter Lawrey

Et j'ai le même problème.

J'ai toujours lancé Tomcat en tant que service et je l'ai connecté à visualvm via une connexion jmx.

Quand avait corrigé catalina.bat:

    set Java_OPTS=%Java_OPTS% 
    -Dcom.Sun.management.jmxremote=true 
    -Dcom.Sun.management.jmxremote.port=9090 
    -Dcom.Sun.management.jmxremote.ssl=false 
    -Dcom.Sun.management.jmxremote.authenticate=false

et l'a lancé avec startup.bat, visualvm détermine automatiquement Tomcat et l'échantillonnage de la mémoire était actif.

0
user3235602

J'ai le même problème mais avec un environnement différent. Mon serveur était une machine Linux, le client une machine Windows 7, mais le problème est le même.

La solution consistait à lancer jvisualvm sur le même ordinateur et avec le même utilisateur que l'application cible. Si je lance jvisualvm avec un autre utilisateur (ex: root), le bouton de mémoire devient gris.

0

J'ai rencontré des problèmes similaires avec JVisualVM, j'ai même posé une question à ce sujet ici

Quelques idées/conseils:

  1. Donc, pour pouvoir échantillonner de la mémoire, vous n'avez pas besoin des options jmx.
  2. Je vérifierais si vous avez jvms 64 bits installé avec des jdks 32 bits sur le même ordinateur (même s'ils ne fonctionnent pas et que tous les vars de l'environnement ne sont pas définis correctement), j'ai lu quelque part que parfois cela rend fou JVisualVM: ) (oui je sais que cela ne nous semble pas raisonnable, développeurs Java)

  3. Si cela ne fonctionne pas, il suffit de désinstaller tous les jdks que vous possédez et d’installer seulement les 1 dont vous avez besoin. Cela peut résoudre le problème.

J'espère que cela vous aidera à résoudre le problème, après tout, comme Peter a dit que ces choses sont nouvelles et en évolution

0
Mark Bramnik

Assurez-vous que votre machine virtuelle virtuelle/JDK est une copie 32 bits si votre environnement d'exécution Java est. Si vous utilisez Eclipse, vérifiez la section JRE sélectionnée sur JRE installés.

0
Sajal Dutta

Tout d’abord, JMX doit être activé . Ajoutez les variables d'environnement de ligne de commande liées nécessaires pour activer JMX si vous ne l'avez pas déjà fait.

La variable d'environnement CATALINA_TMPDIR doit être définie pour correspondre à JVisualVM, comme indiqué dans l'onglet "Propriétés système" de Local> VisualVM. Vous pouvez l'ouvrir en double-cliquant sur l'entrée intitulée "VisualVM" dans le volet Applications à gauche.

Les variables d'environnement peuvent être définies en recherchant l'environnement "Modifier les variables d'environnement pour votre compte". Nouveau ...> Entrez un nom et une valeur.

 enter image description here

Si vous souhaitez que le répertoire temporaire de VisualVM soit ailleurs, vous devez lancer VisualVM à partir de la ligne de commande et ajouter un argument.

C:\Program Files\Java\jdk1.8.0_65\bin>jvisualvm.exe -J-Djava.io.tmpdir=C:\Users\You\Temp
0
Jared

Voici ma solution pour un problème similaire: https://stackoverflow.com/a/16330238/715483

Vous pouvez résoudre cette erreur en

$ ssh -Y utilisateur @ remotemachine

$ wget http://Java.net/projects/visualvm/downloads/download/release135/visualvm_135.Zip

$ unzip visualvm_135.Zip

$ cd visualvm_135/bin

$ ./visualvm

Cette instance de visualvm sera complète, y compris l'échantillonnage de la mémoire et du processeur.

Plus d'informations à ce sujet ici: http://shahriarinia.blogspot.com/2013/05/Java-cpumemory-heap-usage-monitoring.html

http://mshahriarinia.com/