2016-03-30 4 views
1

Ich versuche, Daten der RAM-und CPU-Auslastung eines Prozesses in Windows zu sammeln. Genauer gesagt, muss ich zwei Prozesse unterscheiden (die denselben Namen haben können) oder die Informationen des Prozesses direkt abrufen.Abrufen der RAM/CPU-Auslastung eines bestimmten Prozesses in Java

Zum Beispiel kann ich brauche Daten aus dem Prozess X zu sammeln, das die gleichen Namen wie Prozess Y. kann ich tasklist.exe dafür bin mit:

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); 
} 

Laufen gibt mir zwei verschiedene Verfahren, mit Derselbe Name:

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

In diesem Fall möchte ich nur Informationen aus dem zweiten Prozess sammeln. Ich würde denken, dass ich die PID als eine Kennung verwenden könnte, aber es scheint, dass jeder Lauf dieses Programms die PID der oben gezeigten Prozesse ändert.

Die Frage: Wie kann ich Daten aus dem gleichen Prozess mehrere Male sammeln, obwohl es ein Pendant mit dem gleichen Namen hat? (Wie kann ich wissen, welches ist was, wenn ich wieder tasklist laufen lasse?)

Antwort

1

Ich würde jps verwenden, um die Details jedes Java-Prozesses zu erhalten.

z.B.

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

Ein Java-Prozess ist jps, wie sie sich sehen und der andere Zapfen läuft.

Diese Information kann mit tasklist oder ps verwendet werden, um weitere Informationen über diese Prozesse durch die ID zu erhalten.

Wenn die Befehlszeilen identisch sind, schlage ich vor, eine Dummy-Eigenschaft hinzuzufügen, um es einfacher zu machen, sie voneinander zu unterscheiden, z.

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

Sie beliebige Eigenschaften in der Befehlszeile hinzufügen können, vorausgesetzt, sie werden ignoriert (und nicht zu lang), sie sind harmlos.