2011-11-28 16 views
9

Javaコードは、実行中のJVMの一意の識別子をどのように取得できますか? Unixシステムでは、私が探しているものの例は、JVMが実行されているプロセスのPIDです(JVMとプロセスの間に1対1のマッピングがあると仮定します)。一意のJVM識別子を取得する方法は?

+0

現在のJavaプロセスからプロセスIDを取得する方法の詳細は、http://stackoverflow.com/questions/35842/process-id-in-javaを参照してください。 [このブログのエントリー](http://blog.igorminar.com/2007/03/how-java-application-can-discover-its.html)にも良い情報があります。 – prunge

答えて

9

JVMごとに一意のIDを作成する簡単な方法の1つは、空きポートを取得するポート0を使用するように設定された静的ServerSocketを開始することです。同じポートに2つのServerSocket(JVMなど)が存在することはできないため、すべて一意になり、ポート番号を照会できます。静的なため、JVMあたり1つしかありません。

これはあなたが持っている権限にもよりますが、ほとんどの場合はうまく動作し、常に「127.0.0.1」にバインドして制限を守らないようにすることができます。あなたが複数のホストマシン間で複数のJVMを持っている場合は

static ServerSocket myssock; 
static int myid; 

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

は、あなたはネットワーク全体で固有JVMのIDを作成するために、マシンのLAN IPに上記を組み合わせることができます。

2

我々が使用している:少なくとも日/オラクルのJVMで<pid>@<hostname>のようなものを与える

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

関連する問題