2009-06-27 17 views
15

Ich habe Probleme bei der Überwachung eines Remote-Tomcat-Prozesses. Ich versuche, die Java 6-Versionen von JConsole/JVisualVM zu verwenden.Verbindung zu Tomcat mit VisualVM nicht möglich

Ich habe jstatd ausgeführt auf dem Remote-Server mit der entsprechenden Sicherheitsrichtlinie. Der Prozess wird gestartet und die TCP-Verbindungen sind verfügbar. Wenn ich versuche, eine Verbindung über JConsole herzustellen, bekomme ich 'Connection Failed:jmxrmi'.

Wenn ich versuche, über VisualVM eine Verbindung herzustellen, füge ich den Hostnamen hinzu und meine Rechtklick-Optionen sind 'Add JMX Connection'. Es ist mir aus der Dokumentation nicht klar, ob ich das erwarten würde oder nicht. Wenn ich versuchen, eine Verbindung, die ich erhalten:

'Cannot connect using service:jmx:rmi:///jndi/rmi://<host>:<port>/jmxrmi'. 

So schlagen die docs ich nur aus der Ferne jstatd läuft, muss das in VisualVM zu überwachen, während die Benutzeroberfläche für jmxrmi fragt .. Sind diejenigen, die gleichen? Ich habe versucht, tomcat mit jmx rmi Optionen einzurichten und ich auch Timeout, obwohl ich weiß, es ist kein Firewall-Problem.

Wenn jemand erfolgreich einen Remote-Tomcat-Prozess auf diese Weise angeschlossen bekommen hat und beschreiben könnte, würde mir das sehr helfen.

Antwort

13

Sie müssen die Verwaltungserweiterungen für die Tomcat-VM aktivieren. In der Regel bedeutet, dass in so etwas wie diese vorbei:

-Dcom.sun.management.jmxremote.port=8086 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

Natürlich, wenn Sie es die oben beschriebene Weise tun sicherzustellen, dass Ihr Tomcat im Internet nicht sichtbar ist oder die Port eine Firewall von Remote-Zugriff oder nimmt ähnliche Sicherheitsmaßnahmen um zu vermeiden, dass der Port gescannt und kompromittiert wird. Andernfalls verwenden Sie die Authentifizierungsoptionen.

15

Normalerweise müssen Sie den IP-Adresse des Servers in dem JAVA_OPTS angeben sicherstellen. Andernfalls scheint JMX Anweisungen an den Client zurückzuschicken, um sich erneut mit dem Server an einem anderen Port zu verbinden, und wenn die IP-Adresse dem Client nicht zugewiesen wird, schlägt die Verbindung fehl.

Das Argument hierfür ist:

-Djava.rmi.server.hostname=1.2.3.4 

Sie weitere Informationen in diesem walk through des Setup-Prozesses finden.

+5

Hey @Tom, helfen Sie mir durch die Links. Big +10, tanken Sie! Der '-Djava.rmi.server.hostname = 1.2.3.4' ist obligatorisch, wenn der Server verschiedene Adapter hat (wie in vpn, etc) – azendh

+0

Das funktionierte auch für mich! Vielen Dank! – FSP

+0

Große Hilfe in der Tat ... Gracias! –

2

Der JMX-Port sendet normalerweise Daten an einen anderen Port. Daher müssen Sie diese Portnummer durch Ausführen von lsof -p -n | grep TCP und aktivieren Sie die Berechtigungen für diesen Port und versuchen Sie dann, eine Verbindung zum Remote-JMX-Agenten herzustellen.

2

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 :-)

Verwandte Themen