Immer noch keine Verbindung Tomcat 6 aus der Ferne über VisualVM
Wenn aktiviert, andere Fragen zu diesem Thema aber noch keine soultion nutzen.
Hier ist mein setup:
TC6 läuft auf einer debian vm auf meinem macbook. in /etc/default/tomcat6.0 ich habe folgende Optionen eingestellt:
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8086 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
netstat -ntlp gibt mir:
tcp6 0 0 :::8080 :::* LISTEN 6550/java
tcp6 0 0 :::8086 :::* LISTEN 6550/java
Wo 6550:
root 6550 3.3 6.8 224888 52984 pts/0 Sl 10:31 0:43 /usr/lib/jvm/java-6-sun/bin/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/var/lib/tomcat6.0/conf/logging.properties -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8086 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.endorsed.dirs=/usr/share/tomcat6.0/common/endorsed -classpath :/usr/lib/jvm/java-6-sun/jre//lib/jcert.jar:/usr/lib/jvm/java-6-sun/jre//lib/jnet.jar:/usr/lib/jvm/java-6-sun/jre//lib/jsse.jar:/usr/share/tomcat6.0/bin/bootstrap.jar:/usr/share/tomcat6.0/bin/commons-logging-api.jar -Dcatalina.base=/var/lib/tomcat6.0 -Dcatalina.home=/usr/share/tomcat6.0 -Djava.io.tmpdir=/var/lib/tomcat6.0/temp org.apache.catalina.startup.Bootstrap start
Firewall:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all anywhere anywhere
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all anywhere anywhere
Wenn ich versuche eine Verbindung von OSX mit jvisualm:
hinzufügen eines neuen host mit dem Hostnamen meiner vm (fügte zu /etc/hosts)
hinzufügen eines neuen JMX-Verbindung
VisualVM schlägt fehl mit:
Cannot connect using service:jmx:rmi///jndi/rmi://<vmhostname>:8086/jmxrmi
Wenn ich eine Verbindung zu meiner VM mit ssh -X
und starten jvisualvm auf der gleichen Maschine, dass tomcat ausgeführt wird, weiß ich zunächst nicht sehen TC, aber ich hinzufügen kann, der die jmx-Verbindung wie oben.
Könnte dies ein Problem mit fremden hosts wird misteriously verhindert den Zugriff auf die rmiregistry?
Warum sollte das jemand tun wie eine dumme Sache?
Was mache ich falsch?
(sorry 4 den langen post)
- RMI öffnet anderen, dynamischen ports (und die Standard-JMX-Verbindung verwendet RMI). Das macht es ein Schmerz zu tunnel und korrekt konfigurieren einer firewall. Im Grunde war es nie ausgelegt, aber irgendwo ein weites Netzwerk. Da kann ich nicht geben keine konkreten details, ich schrieb diesen Kommentar.
- Danke Joachim. Eigentlich die Firewall-Zeug ist das, was mich verwirrt. Da läuft es auf einer VM auf meinem lokalen Rechner habe ich komplett deaktiviert Firewall-siehe oben (ALLE ANNEHMEN). Sie behaupten, dass die Verwendung von rmi ist die Standardeinstellung. Haben Sie andere Ideen, wie man zu einem remote-monitor tomcat mit visualvm?
- danke @JoachimSauer, dass mein problem gelöst
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein tutorial auf wie mit Visual VM, Tomcat 7. Es ist ein bisschen auf der ausführlichen Seite, aber sollte helfen, Steuern Sie um eine Reihe der Probleme, die die meisten Menschen laufen in.
Check-out die jmx-listener auf dieser Seite.
http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.html
Damit kann man sowohl die JMX-port und den RMI-registry-port, die beide haben, öffnen Sie auf Ihrer firewall.
Versuchen Sie zu catalina_opts:
-Djava.rmi.server.hostname=vmhostname
und sicherzustellen, dass Ihr mac in der Lage ist, diese zu lösen Hostnamen, z.B.
nc -v vmhostname 8086
sollte gelingen, öffnen Sie die Verbindung.
Können Sie versuchen, hinzufügen, um die aktuelle ip und hostname in /etc/hosts, wo jstatd ausgeführt wird.
Befolgen Sie diese Schritte,
Download jvisualvm setup von Download Jvisualvm
Entpacken Sie das setup und wechseln Sie zum bin-Verzeichnis von der Kommandozeile aus
Verwenden Sie diesen Befehl zum starten des visualvm:
\bin>visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9998 -J-Djava.net.useSystemProxies=true
Holen Sie sich die putty-setup ,gehen Sie zum Installationsverzeichnis von putty verwenden Sie folgenden Befehl, um den ssh tunnel zum remote-system
putty -D-9998 -laden Name_of_the_saved_putty_session
saved_putty_session sollte der tunnel auf localhost:JMX_port und some_source_port
nun in visualvm-Benutzeroberfläche in der Linken Navigationsbereich ,rechten Maustaste auf die remote-und "remote-host" , mit der öffentlichen ip-Adresse des remote-host
Nun auf diese zusätzliche remote-host mit der rechten Maustaste und sagen Sie "HINZUFÜGEN" JMX-VERBINDUNG"
In der Anschlussbox sagen localhost:source_port_provided_in_putty_tunnel
Klicken Sie auf die ok-Schaltfläche und Sie sind fertig.
So dass die oben genannten für mich gearbeitet:
service:jmx:rmi:///jndi/rmi://machinedomainname:1099/jmxrmi
Nachdem ich 1/2 Tag auf diese. Nach all den üblichen Anweisungen und frustriert ist, der oben es geknackt.
Habe ich ein Spiel implementierten Anwendung in amazon ec2 mit den folgenden flags:
Habe ich jvisualvm laufen lokal auf meinem mac.
Habe ich ein jvisualvm remote-host mit host-name:
Dann Hinzugefügt, Hinzugefügt, die eine jmx-Verbindung zu diesem host.
Ich habe versucht, die empfohlen
aber es würde einfach nicht verbinden.
Aber sobald ich dies getan hatte
statt. es angeschlossen und funktioniert.
Keine Ahnung warum! aber es funktioniert.
Stellen Sie sicher, dass Sie
Beachten Sie auch, dass Sie verwenden können IP-Adresse, statt
<vmhostname>
Stellen Sie sicher, dass die
jstatd
Prozess wird ausgeführt auf der remote-Maschine, die Sie überwachen möchten, mit den erforderlichen Berechtigungen.Ich würde vorschlagen, mit dieser option:
Dann verbinden Sie mit
Solange RMI lauscht auf allen interfaces ( ie. 0.0.0.0), dann sollte es kein problem sein Anschluss von einem remote-server, solange die firewall deaktiviert ist (oder sorgfältig so konfiguriert).
Habe ich eigentlich nur dieses problem angegangen und mich herausgefunden.
Ich würde Wetten, dass das problem ist, die RMI-verbindungen - man kann nicht Vorhersagen, welche ports verwendet und so dass Sie nicht bekommen kann es arbeiten mit einer firewall.
Die Problemumgehung ist die Verwendung eines SSH-proxy:
SSH auf die box, wo Ihre Anwendung ausgeführt wird, aber verwenden Sie die-D-option wie folgt:
ssh user@remoteHost -D 9999
Dadurch starten Sie einen socks-proxy auf dem lokalen Rechner auf port 9999.
Öffnen JVisualVM und in den Einstellungen, unter 'network' konfigurieren es für die Verwendung eines socks-proxy auf localhost port 9999.
Wenn Sie der oben genannten, Sie sollten dann in der Lage sein, eine Verbindung zu dem remote-Computer als normal, und da alle RMI-Verkehr wird jetzt über den SSH-proxy, ist es gelocht durch die firewall und funktioniert gut.
Glück 🙂