2010-02-19 6 views
9

Wenn die anderen Fragen zu diesem Thema überprüft, aber bisher keine Lösung. Hier ist mein Setup: TC6 läuft auf einem debian vm auf meinem MacBook. in /etc/default/tomcat6.0 haben folgende I Optionen:Immer noch kann Tomcat 6 per VisualVM nicht remote verbinden

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, von OSX usin verbinden g jvisualm: - einen neuen Host mit dem Hostnamen meiner vm Hinzufügen (hinzugefügt, um es zu/etc/hosts) -

VisualVM irgendwie eine neue JMX-Verbindung hinzu:

Cannot connect using service:jmx:rmi///jndi/rmi://<vmhostname>:8086/jmxrmi 

Wenn ich eine Verbindung zu meiner VM mit ssh -X und jvisualvm auf dem gleichen Rechner starten, auf dem Tomcat läuft, sehe ich zunächst nicht TC, aber ich kann die jmx-Verbindung wie oben hinzufügen.

Könnte dies ein Problem sein, wenn ausländische Hosts mysteriös daran gehindert werden, auf die Rmiregistrierung zuzugreifen? Warum sollte jemand so eine dumme Sache machen?

Was mache ich falsch?

(sorry 4 der langen Pfosten)

+4

RMI öffnet andere, dynamische Ports als auch (und die Standard-JMX-Verbindung verwendet RMI). Das macht es schwer, eine Firewall zu tunneln und korrekt zu konfigurieren. Grundsätzlich wurde es nie entworfen, um irgendwo anders als ein weit geöffnetes Netz zu laufen. Da ich keine konkreten Details angeben kann, habe ich diesen Kommentar geschrieben. –

+0

Danke Joachim. Eigentlich verwirrt mich das Firewalling-Zeug. Da es auf einer VM auf meinem lokalen Rechner läuft, habe ich die Firewall-Funktion vollständig deaktiviert (siehe oben). Sie sagen, dass die Verwendung von RMI der Standard ist. Hast du noch andere Ideen wie man einen Remote Tomcat mit Visualvm überwachen kann? – er4z0r

+0

danke @JoachimSauer, dass mein Problem gelöst – austin

Antwort

0

Vergewissern Sie sich, dass Sie

a) ping <vmhostname> 
b) telnet <vmhostname> 8086 

Beachten Sie auch, dass Sie die IP-Adresse statt <vmhostname>

+0

Die VM ist up und ich kann verbinden. Keine Ahnung :( Just versucht jconsole, was auch scheitert. – er4z0r

+0

Bedeutet es, dass Sie an Port 8086 von Mac OS X zu Ihrer VM verbinden können? Ich bin nicht überrascht, dass jconsole nicht funktioniert. Sowohl VisualVM und Jconsole verwendet die Derselbe Code für die JMX-Verbindung Sie können versuchen, tcpdump auf Ihrer VM auszuführen und sehen, ob eine Verbindung über Port 8086 besteht. Oh, und ich habe gerade tcp6 bemerkt - bedeutet das, dass Sie IPv6 verwenden? ein Grund, warum Sie keine Verbindung zu Tomcat herstellen können –

+0

Danke, ich werde sehen, ob ich es irgendwie in ipv4 einpacken kann. – er4z0r

0

Sicherstellen, dass der jstatd Prozess läuft auf verwenden können die Remote-Maschine, die Sie überwachen möchten, mit den erforderlichen Berechtigungen.

3

Überprüfen Sie den jmx Listener auf dieser Seite.

Sie können sowohl den JMX-Port als auch den RMI-Registry-Port festlegen, die beide auf Ihrer Firewall geöffnet werden müssen.

+2

Das löste mein Problem, große und kurze Post - Seien Sie vorsichtig, den RMI-Hostnamen zu überprüfen, auf vielen Servern ist die externe IP nicht bekannt, so RMI bindet nur an einige lokale Adresse. – Jan

1

Versuchen Sie, catalina_opts hinzuzufügen: -Djava.rmi.server.hostname=vmhostname und stellen Sie sicher, dass Ihr Mac diesen Hostnamen auflösen kann, z. nc -v vmhostname 8086 sollte beim Öffnen der Verbindung gelingen.

1

Sie können versuchen, IP/Hostname zu/etc/hosts hinzuzufügen, wo jstatd ausgeführt wird.

1

diese Schritte ausgeführt haben,

  • Herunterladen jvisualvm Setup von Download Jvisualvm

  • Dekomprimieren dieses Setup und gehen Sie zu bin-Verzeichnis von der Kommandozeile

  • Verwenden Sie diesen Befehl, um die VisualVM zu starten:

    \ bin> visuellevm.exe -J-Dnetbeans.system_socks_proxy = localhost: 9998 -J-Djava.net.useSyst emProxies = true

  • den Kitt Setup erhalten, gehen Sie zu Installationsverzeichnis von Kitt Verwendung SSH-Tunnel zum Remote-System folgenden Befehl

Kitt -D 9998 -load Name_of_the_saved_putty_session

  • saved_putty_session sollte tunnel zu localhost: JMX_port und some_source_port

  • jetzt in visualvm UI in Left nav, rechts t Klicken Sie auf die Fernbedienung und "Add Remote-Host", mit öffentlicher IP-Adresse der Remote-Host

  • auf dem Jetzt Remote-Host der rechte Maustaste und sagt: "ADD JMX CONNECTION"

  • In einem Anschlusskasten hinzugefügt sagen localhost: source_port_provided_in_putty_tunnel

  • Klicken Sie auf OK und Sie sind fertig.

5

Hier ist ein Tutorial auf how to connect Visual VM to Tomcat 7. Es ist ein bisschen auf der ausführlichen Seite, aber sollte helfen, Sie herum eine Anzahl der Probleme zu manövrieren, auf die die meisten Leute stoßen.

+0

+1, das hat bei mir funktioniert. Der Unterschied zwischen der Konfiguration der ursprünglichen Frage und der Konfiguration, die für mich funktionierte, ist dieses Flag: -Djava.rmi.server.hostname = 50.112.22.47 " – DuffJ

0

Ich würde vorschlagen, diese Option verwenden: (. Dh 0.0.0.0)

-Dcom.sun.management.jmxremote.port=1099 

Verbinden Sie dann mit

service:jmx:rmi:///jndi/rmi://machinedomainname:1099/jmxrmi 

Solange RMI auf allen Schnittstellen hört dann sollte es keine Problem bei der Verbindung von einem Remote-Server, solange die Firewall ausgeschaltet ist (oder sorgfältig konfiguriert ist).

1

So arbeitete die oben für mich:

service:jmx:rmi:///jndi/rmi://machinedomainname:1099/jmxrmi

auf diese 1/2 Tag Nachdem er. Nach all den üblichen Anweisungen und frustriert das oben Gebrochene es.

Ich habe eine Spielanwendung in Amazon EC2 mit den folgenden Flags eingesetzt:

-Dcom.sun.management.jmxremote 
    -Dcom.sun.management.jmxremote.port=<myport> 
    -Dcom.sun.management.jmxremote.authenticate=false 
    -Dcom.sun.management.jmxremote.ssl=false 
    -Dcom.sun.management.jmxremote.local.only=false 
    -Djava.rmi.server.hostname=<mymachinedomainname> 

Ich habe jvisualvm lokal auf meinem Mac läuft.

habe ich eine jvisualvm Remote-Host mit Host-Name:

<mymachinedomainname> 

Dann fügte eine JMX-Verbindung zu diesem Host hinzugefügt. Ich habe versucht, die empfohlene

service:jmx:rmi://<mymachinedomainname>:<myport> 

aber es wäre eine Verbindung einfach nicht.

Aber sobald ich

tat statt
service:jmx:rmi:///jndi/rmi://<mymachinedomainname>:<myport>/jmxrmi 

. es verbindet und funktioniert.

Keine Ahnung warum! Aber es funktioniert.

0

Ich habe dieses Problem tatsächlich selbst angepackt und herausgefunden.

Ich würde wetten, dass das Problem die RMI-Verbindungen ist - Sie können nicht vorhersagen, welche Ports es verwenden wird, und so können Sie es nicht mit einer Firewall arbeiten.

Die Abhilfe ist ein SSH-Proxy zu verwenden:

  1. SSH auf das Feld, in dem die Anwendung ausgeführt wird, aber die Option -D wie folgt verwenden:

    ssh user @ Externer_Host -D 9999

    Dies wird einen sOCKS-Proxy auf Ihrem lokalen Rechner auf Port 9999.

  2. öffnet jvisualvm und in den Einstellungen unter ‚Netzwerk‘ konfigurieren starten i t einen SOCKS-Proxy auf localhost verwenden, auf Port 9999.

Wenn Sie die oben tun, sollten Sie dann in der Lage sein, auf den entfernten Rechner als normal zu verbinden und da alle RMI-Verkehr geht jetzt über die SSH-Proxy, es ist durch die Firewall gelocht und funktioniert gut.

Viel Glück :-)