2016-04-15 92 views
6

需要一個api來獲取CPU &我的當前進程或應用程序在java中的內存使用情況。 我得到了一個API來獲取完整的系統的CPU使用率,但我需要特別處理。(getSystemCpuLoadOperatingSystemMXBean接口)Java api獲取我的java應用程序的CPU和內存使用情況

在此先感謝

+4

這取決於你的內存使用情況;你的意思是駐留內存,虛擬內存,堆中使用的活動對象,這些可以是非常不同的。 –

+0

我的意思是堆在使用中。 –

+0

這可以使用運行時獲得。 totalMemory() - freeMemory()注意,這並不能讓你知道堆的完整程度,只有距離下一個完整的GC有多遠。 –

回答

4

有一個好消息和一個壞消息。壞消息是,使用純Java不可能以編程方式查詢CPU使用情況。這根本就沒有API。建議的替代方案可以使用Runtime.exec()來確定JVM的進程ID(PID),調用外部特定於平臺的命令(如ps),並解析其輸出以獲取感興趣的PID。但是,這種方法最多是脆弱的。

然而好消息是,可靠的解決方案可以通過跨越Java並編寫一些通過Java Native Interface(JNI)與Java應用程序集成的C代碼行來完成。

+0

如果你想要我可以幫助你實現這一目標。 –

4

如果您使用不同的OperatingSystemMXBean,則可以獲取該數據。 檢查進口包裝:com.sun.management.OperatingSystemMXBean

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

public class Test { 

public static void main(String[] args) { 
     OperatingSystemMXBean operatingSystemMXBean = 
      (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); 
     System.out.println(operatingSystemMXBean.getProcessCpuLoad()); 
}} 

https://docs.oracle.com/javase/7/docs/jre/api/management/extension/com/sun/management/OperatingSystemMXBean.html

如果我沒有記錯的話,這個類是包含在rt.jar中,出現在你的Java運行時。

+0

發生編譯錯誤:對於OperatingSystemMXBean類型,getProcessCpuLoad()方法未定義。 –

+0

@PSM檢查導入。你確定你正在導入com.sun.management.OperatingSystemMXBean嗎? – RubioRic

+0

@PSM我認爲你仍然在使用java.lang.management.OperatingSystemMXBean – RubioRic

相關問題