2010-10-08 13 views
11

Ho un processo Java in esecuzione su una macchina remota e il processo imposta alcuni mbeans. Ho anche jstatd in esecuzione su quella macchina come lo stesso utente del processo Java. (Gli mbeans possono essere impostati a livello di programmazione o usando -Dcom.sun.management.jmxremote... ecc., Questo non sembra fare la differenza).È possibile che visualvm si connetta automaticamente tramite JMX a un processo remoto?

VisualVM è in grado di effettuare una connessione jstatd al processo, che scopre automaticamente, ma ciò significa che non ottengo l'accesso a mbeans o, ad esempio, il grafico di cronologia della CPU. In alternativa, posso creare una connessione JMX esplicita, che mi dà la solita gamma di strumenti utili, ma voglio che all'applicazione venga assegnata una porta JMX casuale all'avvio, questa configurazione non può essere statica.

C'è un modo per ottenere VisualVM per connettersi automaticamente al mio processo tramite JMX? Ciò richiederebbe l'auto-discovery delle porte JMX, ma avrei pensato che lo jstatd potesse farlo. Qualcuno sa di plugin per visualvm per automatizzare questo?

risposta

13

Sfortunatamente non è possibile assegnare una porta JMX casuale all'applicazione remota. È possibile avviare l'applicazione remota con

-Dcom.sun.management.jmxremote.port=<fixed port> 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

e VisualVM sarà in grado di leggere questa configurazione tramite Jvmstat (fornire da jstatd) e la connessione JMX aperta alla vostra applicazione remota automaticamente. Quindi è necessario assegnare una o più porte fisse alle applicazioni remote. Una volta installato, tutto funzionerà e VisualVM si connetterà automaticamente alla tua applicazione tramite JMX (infatti combinerà i dati sia da Jvmstat sia da JMX).

+0

Come la maggior parte delle chiamate socket, è possibile impostare la porta su 0 e verrà selezionata dinamicamente, quindi jstatd ti collegherà attraverso ... – time4tea

Problemi correlati