2009-12-02 26 views
8

La JVM de Sun viene en dos formas: -client y -server, donde se supone que la máquina virtual de servidor está optimizada para procesos de larga ejecución, y se recomienda para aplicaciones de servidor.¿Cómo me aseguro de estar utilizando la JVM "servidor"?

Cuando corro java sin parámetros, muestra las opciones de uso, que incluye el texto siguiente:

 
    The default VM is server, 
    because you are running on a server-class machine. 

Habiendo visto esto, no me molestó para añadir el -server al comando de inicio de proceso.

Sin embargo, en un registro reciente bloqueo de JVM, me di cuenta de la línea siguiente cerca del final del archivo:

 
vm_info: Java HotSpot(TM) Client VM (14.0-b16) for linux-x86 JRE (1.6.0_14-b08), built on May 21 2009 02:01:47 by "java_re" with gcc 3.2.1-7a (J2SE release) 

Me parece que Java está utilizando el VM cliente, a pesar de lo que dice en el mensaje de ayuda Voy a agregar la opción -server a mi comando de inicio, pero ahora estoy sospechoso. Entonces mi pregunta es: ¿hay alguna manera de asegurarme de que la máquina virtual en la que estoy corriendo sea realmente la máquina virtual del servidor, sin recurrir a forzar un bloqueo JVM?

El sistema operativo es ubuntu 8.04, pero estoy usando JDK 1.6.0_14 que descargué del sitio web de Sun.

+0

Por el De esta manera, soy consciente de que la pregunta parece más apropiada para ServerFault, pero espero que la respuesta sea unas pocas líneas de código Java, por lo que parece que los programadores tienen una mejor oportunidad de responder. – itsadok

+0

Siento la necesidad de señalar que el hecho de ejecutar "java" sin argumentos está usando la máquina virtual del servidor, eso no garantiza que cualquiera secuencia de comandos/comandos que se ejecute, el proceso que se colgó no especifique la máquina virtual del cliente como argumento. –

Respuesta

11

Usted puede hacer

System.out.println(System.getProperty("java.vm.name")); 

Qué en mis declaraciones de la máquina, ya sea:

Java HotSpot (TM) VM cliente

o

Java HotSpot (TM) Servidor de 64 bits VM

Por supuesto que no debe hacer nada crítico en función de este valor, ya que probablemente cambie en el futuro, y será completamente diferente en otra JVM.

+0

Cuando se ejecuta como servidor, la salida es "Java HotSpot (TM) 64-Bit Server VM". Esta es una gran entrada para mi propia pregunta (que debería ser interesante para cualquiera que se pregunte qué información está disponible como propiedades del sistema): http://stackoverflow.com/questions/1803075/complete-list-of-available-java-system- propiedades-y-valores-conocidos – sfussenegger

+0

También puede decir "Java HotSpot (TM) Server VM". Además, diferentes máquinas virtuales pueden devolver diferentes cadenas. – Bombe

9

Tuve una pregunta muy similar which I asked on ServerFault. Yo diría, si le importa qué versión se ejecuta, siempre use -client o -server.

1

Bueno, si se inicia explícitamente con la línea de comando del servidor, se está ejecutando en modo servidor. Se puede comprobar que con esto:

ManagementFactory.getRuntimeMXBean().getInputArguments(); 

puede mirar en RuntimeMXBean que puede abrirse más información, pero que tendría que ser probado en la JVM específica que está ejecutando.

+0

Este comando no muestra el argumento "-server" (solo todos los demás argumentos). –

1

Sin escribir ninguna línea de código, si usa JConsole para conectarse a su JVM, en la pestaña 'VM Summary', debería decir exactamente qué máquina virtual (servidor o cliente) se está monitoreando.

Por ejemplo,

Virtual Machine: OpenJDK Server VM version 1.6.0-b09

para supervisar a distancia la JVM utilizando JConsole, sólo tiene que activar la JMX (Java Management Extensions) agente iniciando JVM con las siguientes propiedades del sistema

> java.rmi.server.hostname=[your server IP/Name] // without this, on linux, jconsole will fail to connect to the remote server where JVM is running 
> com.sun.management.jmxremote.authenticate=false 
> com.sun.management.jmxremote.ssl=false 
> com.sun.management.jmxremote.port=[portNum] 
Cuestiones relacionadas