猿问

请问你如何在Java中监视计算机的CPU、内存和磁盘使用情况?

如何在Java中监视计算机的CPU、内存和磁盘使用情况?

我想用Java监控以下系统信息:

  • 当前CPU使用率*(百分比)
  • 可用内存*(空闲/总计)
  • 可用磁盘空间(免费/总计)

    *注意,我指的是整个系统可用的总体内存,而不仅仅是JVM。

我正在寻找一种跨平台解决方案(Linux、Mac和Windows),它不依赖于我自己调用外部程序或使用JNI的代码。虽然这些都是可行的选择,但如果有人已经有了更好的解决方案,我宁愿自己不维护操作系统特定的代码。

如果有一个免费的库以可靠的、跨平台的方式实现这一点,那将是很棒的(即使它进行外部调用或使用本机代码本身)。

任何建议都是非常感谢的。

为了澄清,我想了解整个系统当前的CPU使用情况,而不仅仅是Java进程(ES)。

SIGARAPI提供了我在一个包中寻找的所有功能,因此它是迄今为止对我的问题的最好回答。但是,由于它是根据GPL授权的,我不能将它用于我原来的目的(一个封闭的来源,商业产品)。Hyperic可能会授权SIGAR用于商业用途,但我还没有对它进行研究。对于我的GPL项目,我肯定会在未来考虑SIGAR。

就我目前的需要而言,我倾向于以下几点:

  • 对于CPU的使用,

    OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()

    (每个CPU平均负载)
  • 为了回忆,

    OperatingSystemMXBean.getTotalPhysicalMemorySize()

    OperatingSystemMXBean.getFreePhysicalMemorySize()

  • 对于磁盘空间,

    File.getTotalSpace()

    File.getUsableSpace()

限制:

这个getSystemLoadAverage()而且磁盘空间查询方法只能在Java 6下使用。另外,一些JMX功能可能并不适用于所有平台(例如,据报道,getSystemLoadAverage()返回-1在Windows上)。

虽然最初在GPL下获得许可,但它已经改变了Apache2.0,一般可用于封闭源、商用产品。



斯蒂芬大帝
浏览 663回答 3
3回答
随时随地看视频慕课网APP

相关分类

Java
我要回答