2016-03-30 19 views
1

Windows'ta bir işlemin 'RAM ve CPU kullanımı' verilerini toplamaya çalışıyorum. Daha spesifik olarak, iki süreci birbirinden ayırmak zorundayım (aynı ada sahip olabilir) veya sürecin bilgisini doğrudan almalıyım. Bununla, bana iki farklı süreçler verir RunningJava'da belirli bir işlemin RAM/CPU kullanımını alma

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

:

Örneğin, ben süreç Bunun için tasklist.exe kullanıyorum Y. ile aynı ada sahip olması, süreç X veri toplamak gerekebilir Aynı ad:

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

Bu durumda, yalnızca ikinci işlemden bilgi toplamak istiyorum. PID'yi bir tanımlayıcı, olarak kullanabileceğimi düşünürdüm ama bu programın her bir çalıştırması,'un yukarısında gösterilen işlemlerin PID değerini değiştiriyor gibi görünüyor.

Soru: Aynı adı taşıyan bir karta sahip olsa da, aynı işlemden aynı anda birden çok kez nasıl veri toplayabilirim? (tasklist'u yeniden çalıştırdığımda hangisinin olduğunu nasıl anlarım?)

cevap

1

Her Java işleminin ayrıntılarını almak için jps kullanırım.

örn.

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

Bir Java süreç jps kendisini görebileceğiniz gibi, diğeri tertibatı çalışıyor.

Bu bilgiler, kimlik tarafından bu işlemler hakkında daha fazla bilgi almak için tasklist veya ps ile kullanılabilir.

Komut satırları aynıysa, bunları ayırt etmeyi kolaylaştırmak için bir taklit özelliği eklemeyi öneririm örn.

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

komut satırına rasgele özellikleri ekleyebilir, bunlar zararsızdır göz ardı (ve çok uzun değil) koşuluyla.

İlgili konular