【问题标题】:Analyze system memory/cpu stats with Java使用 Java 分析系统内存/cpu 统计信息
【发布时间】:2013-03-14 05:26:57
【问题描述】:

我想在我的 Unix 系统上获得简单的结果,例如总内存、可用内存、CPU 使用率等。 目前我使用的是shell命令top

Java 中有什么功能可以做同样的事情吗?

我的目标是通过 Google Gauge Charts 在网络应用程序中显示结果。很明显,我使用 Java 会更容易,而不是在 Java 中执行 Unix 命令。

提前致谢

【问题讨论】:

    标签: java jsp unix google-visualization


    【解决方案1】:
    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
    

    SystemLoadAveragetop 命令报告的load average 相同。

    【讨论】:

    • 你能解释一下这个阶段到底发生了什么 - OperatingSystemMXBean.class.isAssignableFrom
    • 接口java.lang.management.OperatingSystemMXBean只定义了几个方法,而在JRE中这个接口的实际实现通常有更多的方法,所以我在运行时使用反射来发现它们。我遍历ManagementFactory.getOperatingSystemMXBean()返回的对象的所有公共非静态方法,并调用1)名称以get开头的方法和2)在某些实现OperatingSystemMXBean接口的类中定义。第二个条件帮助我避免了不相关的方法,例如Object.getClass()
    • 关于系统mem的信息很多,但cpu没有。我只能看到 ProcessCpuTimeAvailableProcessors,这不足以找到 CPU% in use 对吗?
    • 当我在Linux上运行它时,它输出的SystemLoadAverage参数与top报告的load average相同。不确定这个参数的确切含义。
    猜你喜欢
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    相关资源
    最近更新 更多