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?
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)
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. visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
sur la machine localedans 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
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).
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 :)
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
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é.
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.
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.
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
Utilisez jvisualvm pour détecter facilement les fuites de mémoire et surveiller le processeur, RAM de l'application