jmx/jstatd Zugriff auf remote-Maschine über einen ssh-tunnel
Ich verwenden möchte, visualvm-app über einen ssh-tunnel (auf einer EC2-Maschine) mit jmx ODER jstatd. Wie mache ich das? Hier ist eine Liste von dem, was wurde versucht (und sind gescheitert):
(BTW: wenn visual vm ist nicht angemessen, wie ich finde, memory leaks auf einer remote-Maschine?)
jstatd: Versuch:
Ich die jstatd-server, die für die EC2-Maschine (app war bereits ausgeführt)
Dann habe ich ein tunnel Zuordnung für einen lokalen port 3333 auf remote-port 1099
In VisualVM ich versucht, die Verbindung mit jstatd auf port 3333
... keiner der Prozesse, die auf EC2 zeigte sich
Dieser link sagt, dass jstatd eröffnet einen anderen port:
http://rukuro-blog.heroku.com/2011/06/30/monitoring-remote-java-applications-with-visualvm
... also ich getunnelt, der port vom lokalen host auf den remote.
Ich neu gestartet, visual vm ... immer noch nichts
Als ich versuchte listing-Prozesse laufen aus EC2 mit dem darauf folgenden Befehl ein:
jps -l -m -v rmi://localhost
... Habe ich eine Liste der Prozesse
Aufgeführt, wenn ich es auf meinem Rechner zu Hause mit
jps -l -m -v rmi://localhost:3333
.... Ich bekam keine ! Also, ist der rmi-port, der nicht getunnelt mit jstatd-port (3333) ... ?
die jmx-Versuch:
Startete ich die Anwendung auf dem remote-Computer mit dem folgenden Befehl:
java -Dcom.sun.management.jmxremote.port=3333 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false\
-cp :post/* <appName>
... die app funktioniert, so dass ich getunnelt lokalen port 3333 auf remote-3333
Dann habe ich versucht, die Einrichtung eines jmx-Verbindung zu localhost:3333 von visual vm-interface:
... es erscheint die Fehlermeldung:
cannot connect to localhost:3333 using service:jmx:rmi:///jndi/rmi://localhost:3333/jmxrmi
Wenn ich brauche, um einen link zu entfernen RMI-server-ich bin mir nicht sicher, wie es zu tun.
JMXMP Versuch:
Diese hält, was Sie verspricht, aber etwas ist nicht ganz richtig:
Zuerst habe ich die jmx_remote jar in den classpath und die Anwendung auf dem remote-Rechner mit dem selben Kommando wie in der JMX-Fall, den ich oben zeigte. Ich fand die jar-Datei im oracle download-link
Richte ich einen ssh-tunnel vom lokalen port 3333 auf remote-port 3333. Dann fing ich an, visualvm mit der gleichen jmx_remote Datei in der calsspath.
visualvm -cp:a ~/jmx/jmxremote_optional.jar
Dann habe ich versucht zu verbinden visualvm auf dem remote-server mit:
service:jmx:jmxmp://localhost:3333
Nun visual vm scheint zu versuchen, eine Verbindung auf unbestimmte Zeit. Es zeigt "Hinzufügen service:jmx:jmxp://localhost:3333" in der Statusleiste ... und continutes zu tun, bis ich die shutdown-Anwendung auf dem remote-Ende auf die Zeit, die es wirft ein popup, die sagen, dass es nicht auf' verbinden mit dem server.
Auf mit SOCKEN:
Meine versuche, mit beiden JMX und jstatd gescheitert.
Ich bin nicht sicher, ob der SOCKS-proxy zu arbeiten, also hier ist, wie ich eine Verbindung herstellen wollte:
ssh -i ~/.ssh/starter.pem -v -D 9696 user@host
Nur der Vollständigkeit halber, ich begann den Befehl auf dem anderen Ende mit:
java -Dcom.sun.management.jmxremote\
-Dcom.sun.management.jmxremote.ssl=false\
-Dcom.sun.management.jmxremote.authenticate=false\
-Dcom.sun.management.jmxremote.port=3333 <app>
Und auf dem lokalen Ende ich die visualvm-Verbindung per dieser LINK zu VisualVm-Hilfe-Seite.
Mit der JMX-Verbindung, habe ich den Computernamen und den port durch einen Rechtsklick auf den host auf visualvm und fillng in den host-port, wenn es fordert mich. An diesem Punkt der Statusleiste am unteren Rand zeigt visualvm versucht, eine Verbindung zu der remote-Maschine und nach ein paar Minuten gelingt es nicht.
Mit jstatd-Verbindung, die ich erwartet habe-remote-Prozesse werden automatisch angezeigt. Dies ist nicht geschehen ... es gab keine Fehlermeldungen oder irgendetwas.
Auf die Socken Seite die folgenden Meldungen wiederholen sich zyklisch:
debug1: Connection to port 9696 forwarding to socks port 0 requested.
debug1: channel 2: new [dynamic-tcpip]
channel 3: open failed: connect failed: Connection timed out
debug1: channel 3: free: direct-tcpip: listening port 9696 for 50.16.35.69 port 3333, connect from 127.0.0.1 port 43909, nchannels 4
debug1: Connection to port 9696 forwarding to socks port 0 requested.
debug1: channel 3: new [dynamic-tcpip]
channel 2: open failed: connect failed: Connection timed out
debug1: channel 2: free: direct-tcpip: listening port 9696 for 50.16.35.69 port 1099, connect from 127.0.0.1 port 44644, nchannels 4
Frage ich mich, ob dies hat zu tun mit den Socken-Kanal. Ich habe getunnelt einzelne ports auf dem remote-Rechner vor, so kann ich mir nicht vorstellen, dass es ein Problem bei der Konfiguration für das tunneling. Ich bin mit ubuntu-linux auf beiden Seiten.
Vielen Dank für das Lesen 🙂
InformationsquelleAutor fodon | 2012-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
JMX/RMI ist schwer zu tunnel direkt, denn wenn RMI. Im Grunde erstellt der server einer RMI-stub-definition, die ist bewaffnet mit der Wegbeschreibung, um eine Verbindung zurück zu dem server, von Woher es kam, aber wenn man tunelling, die stubs vom server, aber Ihre Richtungen sind alle falsch, und Sie kommen nicht von hier.
Den waaay einfachste Weg, diese zu lösen, ist, zu Graben, den RMI-connector und verwenden JMXMP. Das zugrunde liegende Protokoll ist Reine sockets-also ist es perfekt für tunneling.
Didnt Arbeit ... details des mein Versuch, die Hinzugefügt wurden, auf die Frage.
Ich habe gerade einige weitere details zu der Frage Abschnitt. Ich habe auch den link, den ich für die Hilfe beim einrichten der Verbindung und die VisualVm für den test.
wenn es nicht funktioniert, warum ist es die akzeptierte Antwort?
Dies scheint eine gute Erklärung: blog.cantremember.com/debugging-with-jconsole-jmx-ssh-tunnels
InformationsquelleAutor Nicholas
Verwenden Sie SSH-tunnel mit SOCKS-proxy. Sehen dieser Beitrag für mehr details.
Sie nicht zu erwähnen, was Sie gemacht haben VisualVM nach der Einrichtung der socks-proxy und was passiert ist.
Ich legte einen link zu den docs, die ich für visual vm setup und ich fügte einige weitere Informationen zu die post meist über das, was ich sah zufällig auf visual vm.
Diese Methode funktioniert für mich, aber nur mit JDK 1.7. JDK 1.6 ist fehlgeschlagen, war aber nicht besonders hilfreich, mir zu erzählen, warum.
InformationsquelleAutor Tomas Hurka
Habe ich nur dieses vor zwei Minuten ...
InformationsquelleAutor blank
Hier sind die Schritte, die für mich gearbeitet:
mvn exec:java -Dexec.args="-pr 2000 -ph 2001 -pv 2002"
(für "jstatd" Typ-Verbindung)-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=2003 -Dcom.sun.management.jmxremote.rmi.port=2003
(für "JMX" Typ-Verbindung)-L2000:localhost:2000 -L2001:localhost:2001 -L2002:localhost:2002 -L2003:localhost:2003
2000
" in "- Port" - Auswahl;localhost:2003
" im "Verbindung" - Eingang und überprüfen Sie "nicht-SSL-Verbindung erforderlich"Disclaimer: ich bin der Autor der open-source - ejstatd tool.
InformationsquelleAutor Anthony O.