2011-11-28 14 views
9

¿Cómo puede el código Java obtener un identificador único para la JVM en la que se está ejecutando? En un sistema Unix, un ejemplo de lo que estoy buscando sería el PID del proceso en el que se está ejecutando la JVM (suponiendo una asignación de uno a uno entre las JVM y los procesos).¿Cómo obtener un identificador de JVM único?

+0

Consulte http://stackoverflow.com/questions/35842/process-id-in-java para obtener más información sobre cómo obtener la ID del proceso Java actual. [Esta entrada del blog] (http://blog.igorminar.com/2007/03/how-java-application-can-discover-its.html) también tiene buena información. – prunge

Respuesta

9

Un método simple de crear una ID única para cada JVM es iniciar un ServerSocket estático, configurado para usar el puerto 0 sobre el cual tomará cualquier puerto libre. Como no pueden existir dos ServerSockets (JVM u otros) en el mismo puerto, todos serán únicos y podrá consultar el número de puerto. Como es estático, solo habrá uno por JVM.

Esto depende de los permisos que tenga, pero en la mayoría de los casos funciona bien y siempre se puede vincular a "127.0.0.1" para que sea menos probable que surja una restricción.

static ServerSocket myssock; 
static int myid; 

static { 
    myssock = new ServerSocket(0); 
    myid = myssock.getLocalPort(); 
} 

Si tiene varias JVM a través de múltiples máquinas host a continuación, usted puede combinar lo anterior con LAN IP de la máquina para crear una identificación única JVM a través de una red.

2

Hemos estado utilizando:

import java.lang.management.ManagementFactory; 
String jvmName = ManagementFactory.getRuntimeMXBean().getName(); 

cual da algo así como <pid>@<hostname>, al menos en Sun/Oracle JVM.

Cuestiones relacionadas