2009-08-21 22 views
11

El hotspot de Java vpm se puede ejecutar con el argumento -client o -server. Si no se especifica ninguno, elige uno según algunas reglas.cómo saber si la VM se está ejecutando en el modo de servidor o cliente?

¿Es posible saber si una VM en ejecución se está ejecutando en modo cliente o servidor cuando el modo no se especifica en la línea de comandos? Necesito esto en una caja de Windows fuera del proceso en ejecución.

Me doy cuenta de que esta no es una pregunta de programación, pero espero que esté bien porque está relacionada con la programación. Gracias por adelantado.

+1

Acaba de agregar jinfo possiblity – VonC

+0

@Hemal por lo tanto mi uso de 'jinfo', estrictamente limitado a la opción' -flag': funciona – VonC

Respuesta

4

En Java, podrías comprobar esto con este código:

String s = System.getProperty("java.vm.name"); 
// s = Java HotSpot(TM) Server VM 

pero esto será altamente específico del proveedor.

Desde la línea de comandos, se puede usar jinfo (utilizado para check a value of a given HotSpot VM option)

C:\>"c:\Program Files\Java\jdk1.6.0_16\bin\jps.exe" -l -m 
21812 sun.tools.jps.Jps -l -m 
19244 (eclipse) 

C:\>"c:\Program Files\Java\jdk1.6.0_16\bin\jinfo.exe" -flag NewRatio 19244 
-XX:NewRatio=12 

desde:

  • es raro que en realidad establecer el NewRatio Hotpot option y
  • la documentación especifica: Proporción de tamaños de generación nuevos/antiguos. [x86 -server: 8; x86 -client: 12]

12 significa "Cliente".

+0

Lo necesito en la línea de comandos, pero lamentablemente jinfo no es compatible con Windows, que es donde lo necesito –

+1

la cadena de retorno es específica del proveedor, pero la cuestión de la VM de Cliente frente a servidor también es específica del proveedor. – beetstra

+0

@Hemal: si puede copiar un JDK6, puede llamar a jinfo en Windows – VonC

5

Conéctese al proceso Java en ejecución con jvisualvm. Esto le permitirá ver los argumentos de JVM que se han utilizado.

0

Si la JVM se inicia con -debug, puede conectarse a él utilizando jdb, y el uso de eval ...

eval System.getProperty("java.vm.name"); 

que o jinfo

2

Puede recuperar esta información de conexión para el MBean servidor. Si está ejecutando una VM Sun, tiene un MBean con el nombre "java.lang: type = Runtime" que expone el atributo "VmName", cuyo valor es el mismo que la propiedad del sistema "java.vm.name". Por ejemplo, para un servidor vm, el valor será algo así como "Java HotSpot (TM) Server VM". Las VM de otros proveedores pueden usar un mecanismo similar.

Puede conectarse al servidor MBean utilizando las herramientas incluidas en el JDK, como jconsole o jvisualvm, o escribiendo su propia herramienta usando JMX si necesita acceso mediante programación.

Cuestiones relacionadas