2013-11-05 31 views
7

Şu anda çalışan Java Sanal Makinesi tarafından kullanılan CPU yüzdesini almak için Java'yı kullanmaya çalışıyorum. Araştırmam beni com.sun.management.OperatingSystemMXBean sınıfını kullanmamı işaret etti.CPU kullanımı için OperatingSystemMXBean'ı kullanma

import java.lang.management.ManagementFactory; 
import com.sun.management.OperatingSystemMXBean; 


public class TestClass { 

public static void main (String[] args) { 
    OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); 

    System.out.println(bean.getProcessCpuLoad()); 
    System.out.println(bean.getSystemCpuLoad()); 

    } 

} 

iki makinelerde bu test ettikten sonra, ben her iki aramalar için -1.0 sonucunu elde duramazsınız: Online örnekler ardından, aşağıdaki yazdım. Bu kodu, Java 7 ve 6'nın 64 ve 32-bit sürümlerini çeşitli yöntemlerle çalıştırmayı denedim. Yine de, elime -1.0, according to the Javadocs dışında bir baskı, burada yapacak başka bilmiyorum

All values betweens 0.0 and 1.0 are possible depending of the activities going on in the system. If the system recent cpu usage is not available, the method returns a negative value.

olduğunu. CPU yükünün alınması kritik ve Sigar gibi başka bir kütüphaneyi kullanmaktan kaçınmak istiyorum. Herhangi bir tavsiyede bulunabilecek veya bu problemle ilgili herhangi bir kavrayışınız var mı?

cevap

21

Birilerine yardım edebilmesi için kendi sorumu yanıtlamıyorum.

Yaptığım şey teknik olarak doğruydu, ancak CPU kullanım bilgilerini toplamak için OperatingSystemMXBean'a yeterli zaman vermedim. JVM, CPU kullanım bilgisini toplayabilmeden önce birkaç saniyeliğine çalışıyor olmalı ve daha sonra yenileme çözünürlüğü uygulamaya bağlı olarak uygulamaya bağlı.

public static void main(String[] args) { 
    OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) ManagementFactory 
      .getOperatingSystemMXBean(); 

    while (true) { 
     System.out.println(bean.getProcessCpuLoad()); 
     System.out.println(bean.getSystemCpuLoad()); 
    } 

} 

Umarım bu Birine Bu yanıt için

+0

Teşekkür yardımcı olabilir ama çalışan gözlemiştir: benim makinede ~ 2 saniye sonra aşağıdaki değişikliği ile kod çalıştırma

kullanım bilgilerini üretmeye başlayacak Bu kod CPU kullanımını% 30-40 artırır. Bu, bu kodu çalıştırdığımızda her zamankinden daha fazla CPU Kullanımı elde ettiğimiz anlamına gelir –

+3

@Shashank Bu kod, yalnızca CPU kullanım bilgilerinin elde edilmesindeki gecikmeyi göstermek anlamına geliyordu. Gerçek bir sistemde, bu çağrıyı sonsuz bir döngüde yapmamalısınız. Uygulamanın birkaç dakikasından sonra, kullanım başına bir kez yeterlidir. – Kon

+0

Bu kodu 1-2 saniye boyunca çalıştırdığınızda bile CPU kullanımı artar. –

İlgili konular