问题 如何获取唯一的JVM标识符?


Java代码如何为运行它的JVM获取唯一标识符?在Unix系统上,我正在寻找的一个例子是运行JVM的进程的PID(假设JVM和进程之间的一对一映射)。


6289
2017-11-28 21:33


起源

看到 stackoverflow.com/questions/35842/process-id-in-java 有关从当前Java进程获取进程ID的更多信息。 这篇博客文章 也有一些很好的信息。 - prunge


答案:


为每个JVM创建唯一ID的一种简单方法是启动静态ServerSocket,设置为使用端口0,它将获取任何空闲端口。由于在同一端口上不能存在两个ServerSockets(JVM或其他),因此它们都是唯一的,您可以查询它的端口号。由于它是静态的,因此每个JVM只有一个。

这取决于您拥有的权限,但在大多数情况下它可以正常运行,并且您始终可以将其绑定到“127.0.0.1”,以使其不太可能遇到任何限制。

static ServerSocket myssock;
static int myid;

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

如果多个主机上有多个JVM,则可以将上述内容与计算机的LAN IP结合使用,以在网络中创建唯一的JVM ID。


10
2017-11-28 21:38





我们一直在使用:

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

这给了类似的东西 <pid>@<hostname>,至少在Sun / Oracle JVM中。


5
2017-09-19 14:49