2012-01-12 21 views
9

Deseo obtener las propiedades del sistema establecidas para un proceso Java/JVM de un tercero. Necesito hacer esto programáticamente. Por ejemplo, obtener la propiedad "java.class.path". ¿Cómo puedo hacer esto?¿Cómo puedo obtener las propiedades del sistema para una instancia de JVM en particular mediante programación?

Sé que podemos obtener propiedades para un programa Java que escribimos utilizando System.getProperty(). Pero necesito obtener las propiedades del sistema para una JVM de un tercero. ¿Cómo puedo obtener lo mismo?

+1

¿Qué quiere decir con JVM de terceros? ¿Te refieres a una JVM en la que no puedes ejecutar tu código? – adarshr

+0

Simplemente solicite el programa que se ejecuta en una JVM de terceros para obtener información –

+0

Sí, quiero decir ... No puedo ejecutar mi código Java en esa JVM. Alternativamente, ¿es posible conectarse a una JVM particular y ejecutar su código java en ella? – user1131528

Respuesta

15

Si por JVM de terceros solo quiere decir otra JVM, entonces debe intentar jinfo. Esto no funcionará con todas las implementaciones de JVM, pero probablemente lo tenga o algo similar. jinfo toma una identificación de proceso como argumento (o sistema remoto, consulte man jinfo). Para encontrar el ID del proceso use 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

Gracias Roger !!! Ese sería el resultado que estoy buscando :) Pero el comando jinfo no se ejecuta en mi implementación de JVM. Solicita una bandera específica y no descarga todas las propiedades del sistema Java como se esperaba. Estoy utilizando la implementación de Java 1.6.0.29 en un cuadro de Windows. ¿Hay otra salida? – user1131528

+0

La documentación indica que debería funcionar igual en Windows. ¿Has probado jinfo -flags o jinfo -sysprops ? –

+0

Yo probé tanto options..But lamentablemente, lanza este mensaje a mí :( Uso: jinfo

0

Para programetically acceso a las estadísticas remotas (JVM parámetros del sistema JVM, statististics de rosca, información, información Memomy GC y otra información), JMX se puede utilizar. Para eso, la JVM remota debe permitir la conexión JMX (Check this on how to activate JMX in remote JVM). Básicamente necesita los siguientes parámetros -D que se fijará en la JVM remota con valores apropiados:

-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 vez que el ajuste anterior se lleva a cabo, conecte al puerto JMX y obtener diferente información Mbean desde el servidor remoto desde su aplicación: a continuación se presenta un código de ejemplo:

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

Con esta mbeanServerConnection, puede acceder a diferentes beans gestionados y obtener la información requerida de los granos MX. Para las propiedades del sistema, debe obtener el bean RuntimeMXBean e invocar getSystemProperties() para obtener todos los parámetros del sistema.

Cuestiones relacionadas