VisualVM durch firewalls - RMI Fehlerbehebung
Sorry für diese Frage muss schon oft gefragt, aber ich kann mich nicht erfolgreich bei der Lösung meines Problems.
Ich habe viel gelesen blogs, Websites, Foren, .... und er fand keine Lösung in meinem Fall.
Fall :
Ich muss eine Verbindung VisualVM auf meine box zu entfernten Servern (Kater, weblogics) für Leistungs - /Gewinde - /Speicher-monitoring.
Diese Server sind installiert (physischen oder virtuellen) Maschinen, die durch eine firewall geschützt werden.
Großen Abständen von ports in der firewall geöffnet sind und verwendet werden können, aber nicht alle Häfen.
Tests
- Ich habe versucht, direkte verbindungen, die über die JMX-in VisualVM, mit folgenden JVM-Optionen auf der server-Seite beim server-Start :
-Djava.rmi.server.hostname=[hostname] -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=[port] -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
Habe ich konkretisiert den Hostnamen, weil aus meinem Netzwerk den Hostnamen und die IP-Adresse des Servers sind nicht die gleichen als jene, die aus dem Netzwerk an den remote-server.
Keinen Erfolg, VisualVM, scheint immer auf der Suche für einen unbekannten server.
-
versucht ab jstatd auf der server-Seite über einen port erreichbar (option-p) von meiner box (telnet auf diesem port funktioniert), aber beim Start von visualVM auf diesem host, mit der jstatd-port, scheint es immer noch etwas zu warten, nicht erreichbar.... Gleiches Verhalten bei jps Verbindung zu dieser remote-host.
-
versucht, mit den gleichen tools, die auf einem server mit weniger Netzwerk-Schutz, und es funktioniert. Also ich habe die verbindungen zwischen meiner box und dem server und Sie sind fertig auf die ports Verschieden von dem, was ich angegeben habe zu jstatd.
Ich verstehe, dass dieser port wird benötigt für die erste Kommunikation (eine Art handshake) und Grundstücks-und Kommunikation erfolgen auf anderen ports, aber nicht predictible (ex: 60305, 55197, ...).
Nicht sicher, ich verstehe sehr gut, wie RMI funktioniert.
Bitte helfen Sie mir, ich werde verrückt !
- Wenn Sie auf Java 7 update 4 es ist die Hoffnung mit dem flag ` -Dcom.Sonne.management.jmxremote.rmi.port=7091` Finden Sie in diesem blog post: hirt.se/blog/?p=289
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider JMX versucht, ports zu öffnen, andere als die, die Sie konfigurieren. Gerade gestern ist es mir gelungen die Verbindung zu tomcat hinter der firewall über JMX. Die zwei knifflige Teile:
legen Sie eine Datei namens
jmxremote.access
imCATALINA_HOME/conf
, die die folgenden Zeilen enthält:in
server.xml
die ports festlegen, das verwendet wird, von jmx, die über eine spezielle tomcat-listener (catalina-jmx-remote.jar erforderlich in /lib):Öffnen Sie dann diese beiden ports auf der firewall. Es funktioniert. Aber das ist nur für tomcat.
Andere Möglichkeit ist die Verwendung ssh-Tunneling. Kurz gesagt - Sie sich mittels SSH verbinden und so konfigurieren, dass es nach vorne einige lokale port (wo die jmx-client ausgeführt wird) auf einige ports auf der anderen Seite des Tunnels.
Referenzen:
catalina-jmx-remote.jar
inCATALINA_HOME/libs
sonst einClassNotFoundException
geworfen wird. Für weitere Informationen zu diesem Thema finden Sie unter tomcat.apache.org/tomcat-6.0-doc/config/...Hier sind die Schritte, um dies zu tun:
mvn exec:java -Djava.rmi.server.hostname=[remote_host_name] -Dexec.args="-pr 1099 -ph 1100 -pv 1101"
(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=1102 -Dcom.sun.management.jmxremote.rmi.port=1102 -Djava.rmi.server.hostname=[remote_host_name]
(für "JMX" Typ-Verbindung) (java.rmi.server.hostname
erforderlich ist hier nur, weil die IP und den Hostnamen von Ihrem Netzwerk nicht die selbe wie die server-Sicht)1099
,1100
,1101
und1102
1099
, können Sie dies in den "Erweiterten Einstellungen")[remote_host_name]:1102
" im "Verbindung" - Eingang und überprüfen Sie "nicht-SSL-Verbindung erforderlich"Disclaimer: ich bin der Autor der open-source - ejstatd tool.
Auf [hostname], öffnen Sie [Anschluss] und tcp-port-Bereich 40000-60000 für Ihre IP nur.
Dies hat den trick für mich ziemlich gut.