2012-01-12 8 views
9

Desidero ottenere le proprietà di sistema impostate per un processo java di terze parti/JVM. Devo farlo a livello di programmazione. Ad esempio ottenere la proprietà "java.class.path". Come posso fare questo?Come posso ottenere le proprietà di sistema per una determinata istanza JVM a livello di codice?

So che possiamo ottenere le proprietà per un programma java che scriviamo usando System.getProperty(). Ma ho bisogno di ottenere le proprietà di sistema per una JVM di terze parti. Come posso ottenere lo stesso?

+1

Cosa intendi per JVM di terze parti? Ti riferisci a una JVM su cui non puoi eseguire il tuo codice? – adarshr

+0

Basta chiedere al programma in esecuzione su JVM di terze parti per informazioni –

+0

Sì, voglio dire..Non riesco a eseguire il mio codice java su quella JVM. In alternativa, è possibile connettersi a una JVM particolare ed eseguire il codice java su di esso? – user1131528

risposta

15

Se per JVM di terze parti si intende solo un'altra JVM, è necessario provare jinfo. Questo non funzionerà con tutte le implementazioni JVM, ma molto probabilmente ce l'ha o qualcosa di simile. jinfo accetta un ID di processo come argomento (o sistema remoto, vedere man jinfo). Per trovare l'id del processo utilizzare jps o jps -v.

 
jinfo 74949 
Attaching to process ID 74949, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 20.4-b02-402 
Java System Properties: 

java.runtime.name = Java(TM) SE Runtime Environment 
sun.boot.library.path = /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Libraries 
java.vm.version = 20.4-b02-402 
awt.nativeDoubleBuffering = true 
... 
+0

Grazie Roger !!! Quello sarebbe l'output che sto cercando :) Ma il comando jinfo non funziona sulla mia implementazione JVM. Richiede un flag specifico e non esegue il dump di tutte le proprietà del sistema Java come sperato. Sto usando l'implementazione di Java 1.6.0.29 su una scatola di Windows. C'è un'altra via d'uscita? – user1131528

+0

La documentazione indica che dovrebbe funzionare allo stesso modo su Windows. Hai provato jinfo -flags o jinfo -sysprops ? –

+0

Ho provato sia options..But purtroppo, si getta questo messaggio di nuovo a me :( Usage: Jinfo

0

Per programetically l'accesso alle statistiche remote JVM (parametri di sistema JVM, statististics della discussione, informazioni Memomy, GC informazione e altre informazioni), JMX può essere utilizzato. Per questo, la JVM remota deve consentire la connessione JMX (Check this on how to activate JMX in remote JVM). Fondamentalmente è necessario i seguenti parametri -D da impostare nella JVM a distanza con i valori appropriati:

-Dcom.sun.management.jmxremote.port=1234 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Djava.rmi.server.hostname=127.0.0.1 

Una volta che l'impostazione di cui sopra è fatto, collegare alla porta JMX e ottenere diverse informazioni Mbean dal server remoto dall'applicazione: Segue alcuni esempi di codice:

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + HOST + ":" + PORT + "/jmxrmi"); 
JMXConnector jmxConnector = JMXConnectorFactory.connect(url); 
MBeanServerConnection mbeanServerConnection = jmxConnector.getMBeanServerConnection(); 

Con questo mbeanServerConnection, è possibile accedere a diversi fagioli gestiti e ottenere le informazioni richieste dai chicchi MX. Per le proprietà di sistema, è necessario ottenere il bean RuntimeMXBean e richiamare getSystemProperties() per ottenere tutti i parametri di sistema.

Problemi correlati