0
我想在我的Unix系統上使用總內存,可用內存,CPU使用等簡單的結果。 目前我正在使用shell命令top
。使用Java分析系統內存/ CPU統計信息
Java中是否有任何功能可以做同樣的事情?
我的目標是通過Google Gauge Charts在網絡應用程序中顯示結果。很顯然,對我來說使用Java會容易得多,而不是從Java內部執行Unix命令。
在此先感謝
我想在我的Unix系統上使用總內存,可用內存,CPU使用等簡單的結果。 目前我正在使用shell命令top
。使用Java分析系統內存/ CPU統計信息
Java中是否有任何功能可以做同樣的事情?
我的目標是通過Google Gauge Charts在網絡應用程序中顯示結果。很顯然,對我來說使用Java會容易得多,而不是從Java內部執行Unix命令。
在此先感謝
OperatingSystemMXBean operatingSystemMXBean =
ManagementFactory.getOperatingSystemMXBean();
for (Method method: operatingSystemMXBean.getClass().getMethods())
{
method.setAccessible (true);
String methodName = method.getName();
if (methodName.startsWith ("get")
&& Modifier.isPublic (method.getModifiers())
&& OperatingSystemMXBean.class.isAssignableFrom (
method.getDeclaringClass())) {
try
{
System.out.println (
methodName.substring (3) + ": " +
method.invoke (operatingSystemMXBean));
}
catch (Throwable ex)
{
// Ignore
}
}
}
輸出是在不同的操作系統和Java版本不同。這是在Linux上的JDK 1.7的輸出:
FreeSwapSpaceSize: 2172059648
FreePhysicalMemorySize: 1757573120
CommittedVirtualMemorySize: 26741071872
MaxFileDescriptorCount: 8192
OpenFileDescriptorCount: 4
ProcessCpuLoad: 2.0251808355598717E-10
ProcessCpuTime: 60000000
SystemCpuLoad: 0.03673989450920194
TotalPhysicalMemorySize: 101439979520
TotalSwapSpaceSize: 4294950912
Name: Linux
ObjectName: java.lang:type=OperatingSystem
AvailableProcessors: 12
Arch: amd64
SystemLoadAverage: 1.86
Version: 2.6.32.54-0.3-default
值SystemLoadAverage
相同load average
通過top
命令報告。
你能解釋一下從這個階段到底發生了什麼 - OperatingSystemMXBean.class.isAssignableFrom – 2013-03-14 05:53:18
接口'java.lang.management.OperatingSystemMXBean'只定義了幾個方法,而在JRE中這個接口的實際實現通常有更多的方法,所以我使用反射來在運行時發現它們。我遍歷由'ManagementFactory.getOperatingSystemMXBean()'返回的對象的所有公共非靜態方法,並調用1)以'get'開頭的名稱和2)在某些實現'OperatingSystemMXBean'接口的類中定義的方法。第二個條件可以幫助我避免諸如Object.getClass()之類的不相關的方法。 – 2013-03-14 05:59:50
非常感謝:) – 2013-03-14 07:08:41