2016-03-30 21 views
1

WindowsでプロセスのRAMとCPU使用率のデータを収集しようとしています。具体的には、2つのプロセスを区別して(同じ名前を持つこともできる)、プロセスの情報を直接取得する必要があります。これは、と、私に2つの異なるプロセスを与える実行Javaで特定のプロセスのRAM/CPU使用率を取得する

String line; 
Process process = Runtime.getRuntime().exec("tasklist.exe"); 
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream())); 
while ((line = input.readLine()) != null) { 
    if (line.startsWith("java.exe")) // I only want the processes that have 'java.exe' for a name. 
     System.out.println(line); 
} 

例えば、私は、プロセス、私はこのためにtasklist.exeを使用していY.と同じ名前を持つかもしれない、プロセスXからのデータを収集する必要があるかもしれません同じ名前:

java.exe      28912 Console     9  18,664 K 
java.exe      36388 Console     9  19,896 K 

この場合、私は2番目のプロセスから情報を収集したいだけです。私は識別子としてというPIDを使用することができますが、このプログラムの各実行は上記のプロセスのPIDを変更すると思われます

質問:同じ名前のものがあるにもかかわらず、同じプロセスから何度もデータを収集できますか? (tasklistを再度実行したときに、どれがどれであるかをどのように知ることができますか?)

答えて

1

私はjpsを使用して、各Javaプロセスの詳細を取得します。

$ jps -lvm 
22490 sun.tools.jps.Jps -lvm -Dapplication.home=/mnt/opt/jdk1.8.0_66 -Xms8m 
6495 spigot-1.9.jar 

つのJavaプロセスは、jps、それは自分自身を見ることができるようになり、他方はインローを実行しています。

これらのプロセスの詳細については、tasklistまたはpsでこの情報を使用してください。

コマンドラインが同じ場合は、ダミーのプロパティを追加して分かりやすくすることをお勧めします。

java -Dprocess=MyFirstProcess ... your normal command line args ... 

あなたは、コマンドラインに任意のプロパティを追加することができ、それらが(長すぎるといない)は無視されて、彼らは無害です。

関連する問題