2011-02-01 13 views
12

Sto provando a interrogare una JVM remota con jps usando jstatd, per poter eventualmente monitorarla usando VisualVM.jps non può connettersi a un jstatd remoto

ho preso jstatd in esecuzione con il seguente criterio di protezione:

grant codebase "file:${java.home}/../lib/tools.jar" { 

    permission java.security.AllPermission; 
}; 

jstatd è in esecuzione su una macchina Linux a 64-bit con un HotSpot VM 1.6.0_10 versione. Il comando jstatd è:

jstatd -J-Djava.security.policy=jstatd.tools.policy -J-Djava.rmi.server.logCalls=true 

Sto cercando di eseguire jps da una macchina Windows 7. A causa di restrizioni del firewall, sto tunneling dei dati RMI attraverso un tunnel SSH alla mia macchina Windows in modo tale che la riga di comando JPS è:

.\jps.exe -m -l rmi://localhost 

Quando eseguo jps, vedo il tentativo di connessione nel registro jstatd, che assomiglia a questo:

Feb 1, 2011 11:50:34 AM sun.rmi.server.UnicastServerRef logCall 
FINER: RMI TCP Connection(3)-127.0.0.1: [127.0.0.1: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(ja va.lang.String)] 

ma sul lato jps ottengo il seguente errore:

Error communicating with remote host: Connection refused to host: 192.168.1.137; nested exception is: 
    java.net.ConnectException: Connection refused: connect 

sulla base del tentativo di connessione elencato nel registro jstatd, penso jps è in realtà ri dolorante l'host, ma per qualche motivo si sta bloccando. C'è qualche criterio di sicurezza che ho impostato o qualche altra impostazione da qualche parte che posso cambiare in modo che possa ottenere jps per estrarre statistiche dal jstatd remoto?

+0

Potrebbe essere che non ho impostato le proprietà jmxremote nell'applicazione che voglio monitorare, come descritto qui: http://stackoverflow.com/questions/726.643/get-heap-dump-da-un-remote-application-in-java-con-jvisualvm – afrosteve

risposta

13

La mia ipotesi è che si sta solo inoltrando la porta del Registro di sistema RMI (1099), ma è necessario aprire anche un'altra porta.

controllare quali porte sul lato remoto

# netstat -nap | grep jstatd 

tcp  0  0 :::1099  :::*  LISTEN  453/jstatd   
tcp  0  0 :::58204 :::*  LISTEN  453/jstatd   

In questo caso sarà necessario inoltrare la porta 58204 e 1099

+0

No, che non ha aiutato. Ho fatto il tunnel verso l'altra porta, 45998 nel mio caso, ma i jps non potevano ancora connettersi. – afrosteve

+1

Il tunneling non ha aiutato, ma l'apertura di più porte ha fatto. Avevi ragione. Grazie. – afrosteve

+0

@afrosteve: puoi spiegare quali altre porte hai aperto e quale hai scavato? –

0

Ecco come si potrebbe facilmente fare questo.

  1. lancio ejstatd nel vostro host remoto in questo modo (esecuzione dalla cartella ejstatd): mvn exec:java -Dexec.args="-pr 2000 -ph 2001 -pv 2002"
  2. aprire quelle 3 porte sul vostro host remoto e renderli disponibili sul computer locale: 2000, 2001 e 2002
  3. Sul computer locale, si sarà in grado di utilizzare jps sostituire <remotehost> con il tuo nome host remoto: jps -m -l rmi://<remotehost>:2000

Disclaimer: Sono l'autore dello strumento open source ejstatd

Problemi correlati