web-dev-qa-db-fra.com

VisualVM sur ssh

J'ai lu Visual VM à distance sur ssh mais je pense que je n'ai pas bien compris parce que cela ne fonctionnait pas pour moi :-( S'il vous plaît, quelqu'un peut-il donner un exemple?

ssh -D 9696 [email protected] et visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true démarre visualvm, mais aucun processus de machine externe n’est affiché (seuls les processus locaux comme visualvm lui-même). De plus, parfois (mais pas toujours), le message "canal 3: échec de l'ouverture: échec de la connexion: connexion refusée" dans ma fenêtre ssh.

De l'aide?

42
bgraves

Vous devez soit exécuter jstatd du côté distant, soit spécifier une connexion JMX en utilisant Host: port. 

Jstatd:

jstatd -J-Djava.security.policy=permissions.txt [-p port]

Après cela: ajoutez une connexion distante à la machine cible et configurez la connexion jstatd sur les propriétés de cette connexion distante.

(permissions.txt contient par exemple ceci:

grant {
  permission Java.security.AllPermission;
};

Edit: (Réponse au commentaire) 

  1. ssh -D 9696 me@remote et exécutez jstatd comme ci-dessus sur la ligne de commande distante. Si vous voulez que jstatd soit sur un port différent de celui par défaut 1099, utilisez l'argument -p pour jstatd. 
  2. exécuter visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true sur la machine locale
  3. dans visual vm: ajoutez une nouvelle connexion distante et spécifiez remote en tant qu'hôte et le port pour jstatd (1099 par défaut, ou ce que vous avez spécifié avec -p lors de l'exécution de jstatd)

    Vous devriez maintenant voir les processus du côté distant dans visualvm 

37
ankon

J'ai une autre solution utilisant tunnel SSH standard et pas de ports de pare-feu pour ouvrir . Pour moi, le proxy SOCKS ne fonctionne pas.

Démarrez votre machine virtuelle Java avec des options:
-Dcom.Sun.management.jmxremote = true
-Dcom.Sun.management.jmxremote.ssl = false
-Dcom.Sun.management.jmxremote.authenticate = false
-Dcom.Sun.management.jmxremote.port = [port1]
-D Java.rmi.server.hostname = localhost
-Dcom.Sun.management.jmxremote.rmi.port = [port2]

La partie importante est "server.hostname = localhost". De plus, vous définissez explicitement les deux ports (connectez + "port RMI aléatoire"), "jmxremote.rmi.port" nécessite au moins la mise à jour 4 de Java 7 (j'ai lu quelque part, je n'ai pas vérifié cette information - utilisez "lsof -i" de votre serveur pour vérifier les ports réellement utilisés).

(Bien sûr, vous pouvez utiliser l'authentification ou SSL.)

Connectez-vous via ssh au serveur et transférez vos fichiers port1 et port2 locaux vers localhost: port1 | 2 et le serveur.

Dans VisualVM, ouvrez une connexion JMX à localhost: port1 (sans aucun paramètre de proxy).

21
Thies

J'ai eu la question de jstatd contraignant sur localhost, donc je devais taper 

jstatd -J-Djava.security.policy=allPerm.policy -J-Djava.rmi.server.logCalls=true -p <port> -J-Djava.rmi.server.hostname=<my ip>

aussi pour jvisualvm j'utilise ces paramètres à la place 

jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=<socks-port>

de cette façon, en me connectant par le proxy SSH, je pourrais utiliser la véritable adresse IP de mon ordinateur distant.

Volant de cette réponse, je me suis fait un rappel complet sur mon site ... i J'espère que cela ne vous dérange pas ankon Merci pour cela au fait :)

11
Endeios

J'avais le même problème lors de la connexion de jVisualVM à une application distante via ssh.

Ce tutoriel m'a aidé à résoudre mon problème. http://issamben.com/how-to-monitor-remote-jvm-over-ssh/

Pour résoudre ce problème, assurez-vous que:

  • vous définissez deux ports dans la configuration JVM 

     -Dcom.Sun.management.jmxremote.ssl=false 
     -Dcom.Sun.management.jmxremote.authenticate=false 
     -Dcom.Sun.management.jmxremote.port=9010
     -Dcom.Sun.management.jmxremote.rmi.port=9011
     -Djava.rmi.server.hostname=localhost
     -Dcom.Sun.management.jmxremote.local.only=false
    
  • tunnel ssh est correctement établi 

     ssh -i yourPermissionFile.pem -l username 101.101.101.101 -L 9010:localhost:9010 -L 9011:localhost:9011
    
8
sam ben

J'ai aussi trouvé que les arguments de jvm:

-J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true

n'a pas fonctionné sur la construction que j'utilise 1.3.2.

C'est pourquoi j'ai utilisé Outils> Options> Réseau et je l'ai configuré manuellement dans les paramètres SOCKS. 

MAIS VisualVM n'a toujours pas trouvé les processus distants. J'ai ensuite supprimé le "Pas de proxy hôtes" écoute de localhost, car cela l'a probablement bloqué. 

3
Tarjei Romtveit

J'ai trouvé que dans le jvm, les arguments pour le proxy ne fonctionnent pas. Au moins dans la version 1.3.3 (build 111013). La définition du proxy dans Outils> Options> Réseau a fonctionné pour moi. Les paramètres de proxy à l'échelle du système doivent également fonctionner, mais par définition, cela affecte toutes les autres connexions réseau. 

3
kgambrah

Essayez une version différente de jvisualvm (par exemple, la plus récente de https://visualvm.github.io/download.html ).

Je ne pouvais pas le faire fonctionner avec jvisualvm, car il n'utilisait pas le proxy SOCKS (je n'ai rien vu de lié à jvisualvm dans ssh -v -D 9696). Les applications distantes ne sont jamais apparues dans jvisualvm. VisualVM leur a toutefois montré après quelques secondes.

0
Thomas Rebele

Je sais que cette question est ancienne mais je suggère la solution la plus simple au lieu d’utiliser jstat.

juste utiliser SSH et Jvisualvm 

  1. ssh avec sockproxy (ex ssh -D 6666 [email protected])
  2. exécutez jvisualvm avec chaussette (jvisualvm.exe -J-DsocksProxyHost = localhost -J-DsocksProxyPort = 6666) 
  3. ajouter un hôte JXM (ex: 234.234.234.234:16000) 

Utilisez jvisualvm pour détecter facilement les fuites de mémoire et surveiller le processeur, RAM de l'application 

0
Lê Tuấn