2009-06-27 17 views
15

Si verificano problemi durante il monitoraggio di un processo Tomcat remoto. Sto cercando di utilizzare le versioni Java 6 di JConsole/JVisualVM.Impossibile connettersi a Tomcat tramite VisualVM

Ho jstatd in esecuzione sul server remoto con la politica di sicurezza appropriata. Il processo è avviato e le connessioni TCP sono disponibili.

Quando provo a connettermi tramite JConsole, ottengo 'Connection Failed:jmxrmi'.

Quando provo a connettermi tramite VisualVM, aggiungo il nome host e le opzioni del tasto destro del mouse sono "Aggiungi connessione JMX". Non mi è chiaro dai documenti se questo è ciò che mi aspetterei di vedere o meno. Quando provo a collegare, ottengo:

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

Così, i documenti suggeriscono ho solo bisogno ho jstatd esecuzione da remoto per il monitoraggio in VisualVM, mentre l'interfaccia utente sta chiedendo jmxrmi .. Sono quelli la stessa cosa? Ho provato a configurare tomcat usando le opzioni jmx rmi e ho anche timeout, anche se so che non si tratta di un problema con il firewall.

Se qualcuno ha avuto successo ottenendo un processo Tomcat remoto collegato in questo modo, e potrebbe descrivere come, questo mi avrebbe aiutato molto.

risposta

13

È necessario abilitare le estensioni di gestione su Tomcat VM. Di solito questo significa che passa qualcosa come questi:

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

Naturalmente, se lo si fa nel modo sopra assicurarsi che il Tomcat non è visibile su Internet o la porta è firewalled da accesso remoto o adottare misure di sicurezza simili per evitare di essere scansionato e compromesso. Altrimenti usa le opzioni di autenticazione.

15

Di solito è necessario assicurarsi di specificare l'indirizzo IP del server nei JAVA_OPTS. In caso contrario, sembra che JMX sta per inviare istruzioni al client per riconnettersi al server su una porta diversa e se non ha l'indirizzo IP per fornire il client, la connessione non riesce.

L'argomento di questo è:

-Djava.rmi.server.hostname=1.2.3.4 

è possibile trovare ulteriori dettagli in questo walk through del processo di installazione.

+5

Ehi, @Tom, il tuo passaggio attraverso i link mi aiuta. Big +10, tank you! '-Djava.rmi.server.hostname = 1.2.3.4' è obbligatorio, se il server ha adattatori diversi (come in vpn, ecc.) – azendh

+0

Questo ha funzionato anche per me! Grazie mille! – FSP

+0

Grande aiuto davvero ... Gracias! –

2

La porta JMX di solito invia i dati a un'altra porta, quindi è necessario trovare tale numero di porta eseguendo lsof -p -n | grep TCP e abilitare le autorizzazioni per quella porta e quindi provare a connettersi all'agente JMX remoto.

2

In realtà ho appena risolto questo problema e l'ho capito.

Scommetto che il problema sono le connessioni RMI: non è possibile prevedere quali porte utilizzeranno e quindi non è possibile farlo funzionare con un firewall.

La soluzione è quella di utilizzare un proxy SSH:

  1. SSH alla scatola in cui l'applicazione è in esecuzione, ma utilizzare l'opzione -D come questo:

    ssh user @ remotehost -D 9999

    Questo avvierà un proxy sOCKS sulla macchina locale sulla porta 9999.

  2. Aprire jvisualvm e nelle preferenze, in 'rete' configurare i t utilizzare un proxy SOCKS a localhost, sulla porta 9999.

Se fate quanto sopra, si dovrebbe quindi essere in grado di connettersi alla macchina remota come normale e poiché tutto il traffico RMI è ora andare oltre il Il proxy SSH, è perforato attraverso il firewall e funziona bene.

Buona fortuna :-)

Problemi correlati