2010-06-15 14 views

उत्तर

1

प्रबंधन फैक्टरी के भीतर प्रत्यक्ष एमबीन प्रतीत नहीं होता है। निकटतम http://java.sun.com/javase/6/docs/api/java/lang/management/OperatingSystemMXBean.html#getSystemLoadAverage() है जिसका उपयोग संपूर्ण सिस्टम द्वारा उपयोग किए गए CPU की गणना करने के लिए किया जा सकता है।

हालांकि

this URL has suggested a method की JConsole

+0

नहीं (सरल) समाधान मैं चाहता था है, लेकिन एक ही तरीका हो रहा है। – tuler

+1

ध्यान दें कि कलाकार com.sun.management.OperatingSystemMXBean है! –

+0

आपके द्वारा दिया गया यूआरएल जावा 7 के लिए काम करता है। 'Com.sun.management.OperatingSystemMXBean' जावा 6 के साथ सुलभ नहीं है ... – Matthieu

17

अद्यतन स्रोत कोड पर आधारित: जावा 7 में आप यह इतना की तरह कर सकते हैं:

public static double getProcessCpuLoad() throws MalformedObjectNameException, ReflectionException, InstanceNotFoundException { 

    MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); 
    ObjectName name = ObjectName.getInstance("java.lang:type=OperatingSystem"); 
    AttributeList list = mbs.getAttributes(name, new String[]{ "ProcessCpuLoad" }); 

    if (list.isEmpty())  return Double.NaN; 

    Attribute att = (Attribute)list.get(0); 
    Double value = (Double)att.getValue(); 

    if (value == -1.0)  return Double.NaN; 

    return ((int)(value * 1000)/10.0);  // returns a percentage value with 1 decimal point precision 
} 

----- -----

नीचे मूल जवाब

जावा 7 में आप com.sun.management.OperatingSystemMXBean की छिपी तरीकों का उपयोग कर सकते हैं:

getProcessCpuLoad() // returns the CPU usage of the JVM 

getSystemCpuLoad()  // returns the CPU usage of the whole system 

दोनों मान 0.0 और 1.0 के बीच डबल के रूप में लौटाए जाते हैं, इसलिए प्रतिशत प्राप्त करने के लिए बस 100 से गुणा करें।

com.sun.management.OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class); 
System.out.println(osBean.getProcessCpuLoad() * 100); 
System.out.println(osBean.getSystemCpuLoad() * 100); 

इन के बाद से छिपे हुए हैं, undocumented वाली विधियों com.sun.management.OperatingSystemMXBean पैकेज में मौजूद हैं और नहीं java.lang.management.OperatingSystemMXBean में एक जोखिम है कि वे कुछ JVMs में या भावी अपडेट में उपलब्ध नहीं होगा, तो आप तय करना चाहिए है वहाँ अगर तुम ' उस जोखिम को लेने के लिए तैयार हैं या नहीं।

अधिक के लिए https://www.java.net/community-item/hidden-java-7-features-%E2%80%93-system-and-process-cpu-load-monitoring देखें।

+0

नोट: ये विधियां जावा 6 में उपलब्ध नहीं हैं * – Brandon

+5

सही। यही कारण है कि मैंने अपने जवाब में दो बार लिखा: जावा 7 में ... – isapir

0

मैंने इंटरनेट से एक कोड संशोधित किया, इस तरह मैंने परीक्षण किया और परिणाम लगभग लिनक्स ps कमांड के परिणाम से मेल खाता है।

/** नीचे कोड */

public float getCpuUsed() { 

    /** get a MXBean */ 
    com.sun.management.OperatingSystemMXBean osMXBean = 
    (com.sun.management.OperatingSystemMXBean) 
    ManagementFactory.getOperatingSystemMXBean(); 


    /** set old timestamp values */ 
    long previousJvmProcessCpuTime = osMXBean.getProcessCpuTime(); 


    int sleepTime = 350; 
    /** sleep for a while to use to calculate */ 
    try { 
     TimeUnit.MILLISECONDS.sleep(sleepTime); 
    } catch (InterruptedException e) { 
     logger.error("InterruptedException occurred while MemoryCollector sleeping..."); 
    } 

    /** elapsed process time is in nanoseconds */ 
    long elapsedProcessCpuTime = osMXBean.getProcessCpuTime() - previousJvmProcessCpuTime; 

    /** elapsed uptime is in milliseconds */ 

    long elapsedJvmUptime = sleepTime ; 

    /** total jvm uptime on all the available processors */ 
    //long totalElapsedJvmUptime = elapsedJvmUptime * osMXBean.getAvailableProcessors() ; 
    long totalElapsedJvmUptime = elapsedJvmUptime; 
    //System.out.println("echo cpu processors num " + osMXBean.getAvailableProcessors()); 

    /** calculate cpu usage as a percentage value 
     to convert nanoseconds to milliseconds divide it by 1000000 and to get a percentage multiply it by 100 */ 
    float cpuUsage = elapsedProcessCpuTime/(totalElapsedJvmUptime * 10000F); 



    return (float)(Math.round(cpuUsage*10)/10); 
} 
संबंधित मुद्दे