Remote-JMX-Verbindung
Ich versuche, öffnen Sie eine JMX-Verbindung zum java-Anwendung auf einem entfernten Rechner läuft.
Die Anwendung JVM konfiguriert ist, mit den folgenden Optionen:
- com.Sonne.management.jmxremote
- com.Sonne.management.jmxremote.port=1088
- com.Sonne.management.jmxremote.authenticate=false
- com.Sonne.management.jmxremote.ssl=false
Ich bin in der Lage, eine Verbindung mit localhost:1088
mit jconsole oder mit jvisualvm.
Aber ich bin nicht in der Lage, eine Verbindung mit xxx.xxx.xxx.xxx:1088
von einem remote-Computer.
Es ist keine firewall zwischen den Servern, oder auf der OS. Aber, diese Möglichkeit zu entfernen ich telnet xxx.xxx.xxx.xxx 1088
und ich denke, es verbindet, wie die console-Bildschirm wird leer.
Beide Server sind Windows Server 2008 x64. Versucht mit 64-bit-JVM 32-bit, funktionieren weder.
InformationsquelleAutor der Frage tuler | 2009-05-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte es schon auf Linux das problem wäre, dass localhost für die loopback-Schnittstellemüssen Sie die Anwendung zu binden, um Ihre Netzwerk-Schnittstelle.
Können Sie den Befehl netstat, um zu bestätigen, dass es ist nicht gebunden an die erwartete Schnittstelle des Netzwerks.
Können Sie sich diese Arbeit machen, indem Sie das Programm mit der system-parameter
java.rmi.server.hostname="YOUR_IP"
- entweder als Umgebungsvariable oder mitInformationsquelleAutor der Antwort takete.dk
Habe ich verbringen mehr als einen Tag versuchen, um JMX-arbeiten von außerhalb localhost. Es scheint, dass SUN/Oracle versäumt, eine gute Dokumentation, die auf dieser.
Sicher sein, dass der folgende Befehl gibt dir einen echten IP oder HOSTNAME. Wenn es funktioniert, wieder zurückgeben, wie 127.0.0.1, oder localhost 127.0.1.1 es wird nicht funktionieren, und Sie müssen update
/etc/hosts
Datei.Hier ist der Befehl benötigt zum aktivieren von JMX-auch von außerhalb
Wo Sie ausgegangen, myserver.example.com muss mit dem übereinstimmen, was
hostname -i
gibt.Natürlich müssen Sie sicher sein, dass die firewall nicht blockieren Sie, aber ich bin mir fast sicher, dass dies nicht Ihr problem, das problem ist der Letzte parameter, die nicht dokumentiert ist.
InformationsquelleAutor der Antwort sorin
http://blogs.oracle.com/jmxetc/entry/troubleshooting_connection_problems_in_jconsole
Wenn Sie versuchen, Zugriff auf einen server hinter einem NAT ist - werden Sie wahrscheinlich haben, um starten Sie Ihren server mit der option
so, dass die RMI-stubs an den client gesendet werden, enthalten der server die öffentliche Adresse, so dass Sie erreichen, indem die clients von außen.
InformationsquelleAutor der Antwort h0nIg
In meinen Tests mit Tomcat und Java 8, die JVM wurde die Eröffnung eines temporären port-zusätzlich zu dem angegebenen JMX. Der folgende code fixiert mich; es zu versuchen, wenn Sie Probleme haben, wo Ihre JMX-client (z.B. VisualVM nicht anschließen.
Siehe auch Warum Java öffnet sich 3 Anschlüsse, wenn die JMX konfiguriert ist?
InformationsquelleAutor der Antwort LeslieM
es scheint, dass Ihr Ende Zitat kommt zu früh. Er soll nach dem letzten parameter.
Diesem trick arbeitete für mich.
Ich etwas Interessantes bemerkt: wenn ich meine Anwendung unter Verwendung der folgenden Befehlszeilen:
Wenn ich versuche eine Verbindung zu diesem Anschluss von einem remote-Computer mithilfe von jconsole, die TCP-Verbindung erfolgreich ist, einige der Datenaustausch zwischen den remote-jconsole und lokalen jmx-agent, wo meine MBean bereitgestellt wird, und dann, jconsole verbinden " angezeigt Fehlermeldung. Ich führte ein wireshark-capture, und es zeigt den Datenaustausch aus agent und jconsole.
So, das ist kein Netzwerk-Problem, wenn ich führen Sie den Befehl netstat-an mit oder ohne java.rmi.server.hostname-Eigenschaft system, ich habe folgende Bindungen:
Es bedeutet, dass in beiden Fällen der socket erstellt, über den port 9999 akzeptiert verbindungen von jedem host eine Adresse angeben.
Denke ich, dass der Inhalt dieser system-Eigenschaft wird verwendet, irgendwo in der Verbindung und im Vergleich mit der tatsächlichen IP-Adresse verwendet, die von Agenten für die Kommunikation mit jconsole. Und wenn diese Adresse nicht übereinstimmen, wird keine Verbindung hergestellt.
Habe ich dieses problem nicht, während die Verbindung von den gleichen host verwenden von jconsole, nur aus realen physischen remote-hosts. Also, ich nehme an, dass die Prüfung nur durchgeführt wird, wenn die Verbindung kommen von "außen".
InformationsquelleAutor der Antwort yohann.martineau
Vielen vielen Dank, es funktioniert so:
java -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx -Dcom.Sonne.management.jmxremote -Dcom.Sonne.management.jmxremote.ssl=false -Dcom.Sonne.management.jmxremote.authenticate=false -Dcom.Sonne.management.jmxremote.port=25000 -jar myjar.jar
InformationsquelleAutor der Antwort user3406690
der Sache, dass die Arbeit für mich war, war die /etc/hosts der hostname, die ip und nicht an die loopback-Schnittstelle und als Neustart meiner Anwendung.
cat /etc/hosts
Dies ist meine Konfiguration:
InformationsquelleAutor der Antwort mozzi zadok
Ich habe das gleiche Problem und ich ändern hostname entspricht dem lokalen host-Namen zu 0.0.0.0, scheint es zu funktionieren, nachdem ich das tun.
InformationsquelleAutor der Antwort ianpojman
Aktivieren von JMX-remote, unter VM-Parameter zusammen mit dem JAVA-Befehl.
InformationsquelleAutor der Antwort Ajay
Versuchen Sie es mit ports höher als 3000.
InformationsquelleAutor der Antwort darko.topolsek