VisualVM sur ssh

j'ai lu Visual VM Remote over ssh mais je pense que je n'ai pas tout à fait compris parce que ça ne marchait pas pour moi :-( S'il vous plaît quelqu'un peut donner un exemple?

ssh -D 9696 login@ip.of.external.machine 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 montré (seuls les processus locaux comme visualvm lui-même). De plus parfois (mais pas toujours) j'ai reçu le message "channel 3: open failed: connect failed: Connection refused" dans ma fenêtre ssh.

Toute aide?

39
demandé sur zb226 2009-10-23 01:09:05

7 réponses

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: ajouter une connexion distante à la machine cible, et sur les propriétés de cette connexion distante configurer la connexion jstatd.

(autorisations.txt contient par exemple ceci:

grant {
  permission java.security.AllPermission;
};

Edit: (Réponse à un commentaire)

  1. ssh -D 9696 me@remote, et exécuter jstatd comme ci-dessus sur la ligne de commande à distance. Si vous voulez que jstattd soit sur un port différent de celui par défaut 1099, utilisez l'argument-p pour jstattd.
  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: ajouter une nouvelle connexion à distance, et spécifier la distance comme 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 à distance dans visualvm

37
répondu ankon 2013-07-18 13:06:22

j'ai une autre solution en utilisant SSH et pas de ports de pare-feu pour l'ouvrir. Pour moi, le proxy des chaussettes ne marche pas.

Démarrer votre JVM avec les options:

- Dcom.soleil.gestion.jmxremote=true

- Dcom.soleil.gestion.jmxremote.ssl=false

- Dcom.soleil.gestion.jmxremote.authentifier=false

- Dcom.soleil.gestion.jmxremote.port= [port1]

-D java.rmi.serveur.hostname=localhost

- Dcom.soleil.gestion.jmxremote.rmi.port=[usb2]

la partie importante est " server.hostname=localhost". En outre, vous définissez explicitement les deux ports (connect + "aléatoire" port RMI), "jmxremote.rmi.port " nécessite au moins Java 7 update 4 (j'ai lu quelque part, n'a pas vérifié cette info-utiliser "lsof-i" sur votre serveur machine pour vérifier les ports réellement utilisés).

(bien sûr, vous pouvez utiliser authentification ou SSL.)

connectez-vous via ssh au serveur et faites suivre votre port1 et usb2 localhost:port1|2 un le serveur.

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

19
répondu Thies 2016-06-10 01:06:28

j'ai eu le problème de la liaison jstatd sur localhost, donc j'ai dû taper

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

de cette façon, en me connectant par le proxy ssh, je pourrais utiliser l'adresse ip réelle de ma machine distante.

en volant cette réponse je me suis fait un rappel complet sur mon site .. je espérons que vous n'avez pas l'esprit ankon Merci pour ce par la voie :)

11
répondu Endeios 2015-03-16 14:10:14

j'avais le même problème en connectant jVisualVM à une application distante sur 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 :

  • vous mettez 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
    
  • le tunnel ssh est correctement établi

     ssh -i yourPermissionFile.pem -l username 101.101.101.101 -L 9010:localhost:9010 -L 9011:localhost:9011
    
4
répondu sam ben 2017-05-09 14:07:59

j'ai aussi trouvé que les arguments jvm:

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

n'a pas fonctionné sur le build que j'utilise 1.3.2.

C'est pourquoi j'ai utilisé les Outils > Options > Network et l'ai paramétré manuellement sous les réglages des chaussettes.

mais VisualVM n'a toujours pas trouvé les processus à distance. J'ai ensuite supprimé l'écoute "no proxy hosts" de localhost, car cela l'a probablement bloqué.

3
répondu Tarjei Romtveit 2012-10-24 12:09:37

j'ai trouvé que dans les arguments jvm pour le proxy ne fonctionnent pas. Au moins dans la version 1.3.3 (build 111013). Définir le proxy dans Outils > Options > Réseau a fonctionné pour moi. De plus, les paramètres de proxy à l'échelle du système devraient fonctionner même si, par définition, ils affectent toutes les autres connexions réseau.

2
répondu kgambrah 2011-11-24 03:13:41

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

Je n'ai pas pu le faire fonctionner avec jvisualvm, car il n'a pas utilisé le proxy de chaussettes (Je n'ai rien vu concernant jvisualvm dans ssh-v-d 9696). Les applications distantes ne sont jamais apparues dans jvisualvm. VisualVM les a cependant montrés après quelques secondes.

0
répondu Thomas Rebele 2017-01-23 11:32:35