Domanda

Ho letto Visual VM da remoto su ssh ma penso di non aver capito appieno perché non funzionava per me :-( Per favore qualcuno può fare qualche esempio?

ssh -D 9696 login@ip.of.external.machine e visualvm.exe -J-Dnetbeans.system_socks_proxy = localhost: 9696 -J-Djava.net.useSystemProxies = true avvia visualvm, ma non vengono mostrati processi di macchine esterne (solo quelli locali come visualvm stesso). Inoltre a volte (ma non sempre) ho ricevuto il messaggio "canale 3: apertura non riuscita: connessione non riuscita: connessione rifiutata" nella mia finestra ssh.

Qualche aiuto?

È stato utile?

Soluzione

È necessario eseguire jstatd sul lato remoto o specificare una connessione JMX utilizzando host: port.

Jstatd:

jstatd -J-Djava.security.policy = autorizzazioni.txt [-p port]

Dopodiché: aggiungi una connessione remota al computer di destinazione e sulle proprietà di quella connessione remota configura la connessione jstatd.

(Permissions.txt contiene ad esempio questo:

grant {
  permission java.security.AllPermission;
};

Modifica: (Rispondi al commento)

  1. ssh -D 9696 me @ remote ed esegui jstatd come sopra nella riga di comando remota. Se si desidera che jstatd si trovi su una porta diversa dalla 1099 predefinita, utilizzare l'argomento -p per jstatd.
  2. esegui visualvm.exe -J-Dnetbeans.system_socks_proxy = localhost: 9696 -J-Djava.net.useSystemProxies = true sul computer locale
  3. in visual vm: aggiungi una nuova connessione remota e specifica remote come host e la porta per jstatd (1099 per impostazione predefinita, o cosa hai specificato con -p quando esegui jstatd)

    Ora dovresti vedere i processi sul lato remoto in visualvm

Altri suggerimenti

Ho un'altra soluzione che utilizza tunneling SSH standard e nessuna porta firewall per aprire. Per me, il proxy SOCKS non funziona.

Avvia la tua JVM con le opzioni:
      -Dcom.sun.management.jmxremote = true
      -Dcom.sun.management.jmxremote.ssl = false
      -Dcom.sun.management.jmxremote.authenticate = false
      -Dcom.sun.management.jmxremote.port = [port1]
      -D java.rmi.server.hostname = localhost
      -Dcom.sun.management.jmxremote.rmi.port = [port2]

La parte importante è " server.hostname = localhost " ;. Inoltre, definisci in modo esplicito entrambe le porte (connetti + "porta casuale" RMI), "jmxremote.rmi.port" necessita almeno dell'aggiornamento 4 di Java 7 (ho letto da qualche parte, non ho controllato queste informazioni - usa " lsof -i " sul tuo server per controllare le porte realmente utilizzate).

(Naturalmente, è possibile utilizzare l'autenticazione o SSL.)

Connetti via ssh al server e inoltra la porta1 e la porta2 locali all'host locale: porta1 | 2 e il server.

In VisualVM aprire una connessione JMX a localhost: port1 (senza alcuna impostazione proxy).

Ho avuto il problema di jstatd binding su localhost, quindi ho dovuto digitare

jstatd -J-Djava.security.policy=allPerm.policy -J-Djava.rmi.server.logCalls=true -p <port> -J-Djava.rmi.server.hostname=<my ip>

anche per jvisualvm utilizzo invece questi parametri

jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=<socks-port>

in questo modo, collegandomi con il proxy ssh, potrei usare il vero indirizzo IP della mia macchina remota.

Rubando da questa risposta mi sono fatto un promemoria completo sul il mio sito .. io spero non ti dispiaccia ankon Grazie per questo :)

Stavo riscontrando lo stesso problema durante la connessione di jVisualVM a un'applicazione remota tramite ssh.

Questo tutorial mi ha aiutato a risolvere il mio problema. http://issamben.com/how-to-monitor-remote- jvm-over-ssh /

Per risolvere questo problema assicurati di:

  • hai impostato due porte nella configurazione jvm

     -Dcom.sun.management.jmxremote.ssl=false 
     -Dcom.sun.management.jmxremote.authenticate=false 
     -Dcom.sun.management.jmxremote.port=9010
     -Dcom.sun.management.jmxremote.rmi.port=9011
     -Djava.rmi.server.hostname=localhost
     -Dcom.sun.management.jmxremote.local.only=false
    
  • il tunnel ssh è stato impostato correttamente

     ssh -i yourPermissionFile.pem -l username 101.101.101.101 -L 9010:localhost:9010 -L 9011:localhost:9011
    

Ho anche scoperto che gli argomenti jvm:

-J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true

non ha funzionato sulla build che sto usando 1.3.2.

Pertanto ho usato gli strumenti > Opzioni > Rete e impostarlo manualmente nelle impostazioni SOCKS.

MA VisualVM non ha ancora trovato i processi remoti. Ho quindi rimosso " Nessun host proxy " ascolto di localhost, poiché questo probabilmente lo ha bloccato.

Ho scoperto che negli argomenti jvm per il proxy non funzionano. Almeno nella versione 1.3.3 (build 111013). Impostazione del proxy in Strumenti > Opzioni > La rete ha funzionato per me. Anche le impostazioni proxy a livello di sistema dovrebbero funzionare sebbene per definizione influisca su tutte le altre connessioni di rete.

Prova una versione diversa di jvisualvm (ad es. la più recente di https://visualvm.github.io/ download.html )

Non riuscivo a farlo funzionare con jvisualvm, in quanto non utilizzava il proxy SOCKS (non vedevo nulla relativo a jvisualvm in ssh -v -D 9696). Le applicazioni remote non sono mai apparse in jvisualvm. VisualVM tuttavia li ha mostrati dopo alcuni secondi.

So che questa domanda è vecchia ma suggerisco la soluzione più semplice invece di usare jstat.

usa solo SSH e Jvisualvm

  1. ssh con sockproxy (ex ssh -D 6666 host@123.123.123.123)
  2. esegui jvisualvm con calzino (jvisualvm.exe -J-DsocksProxyHost = localhost -J-DsocksProxyPort = 6666)
  3. aggiungi host JXM (es: 234.234.234.234:16000)

Utilizza il modo semplice jvisualvm per rilevare perdite di memoria e monitorare CPU, RAM dell'applicazione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top