如何在 Java 中监视计算机的 CPU、内存和磁盘使用情况?
我想在Java中监视以下系统信息:
- 当前 CPU 使用率**(百分比)
- 可用内存*(可用/总内存)
-
可用磁盘空间(可用/总计)
*请注意,我的意思是整个系统可用的总内存,而不仅仅是JVM。
我正在寻找一种跨平台解决方案(Linux,Mac和Windows),它不依赖于我自己的代码调用外部程序或使用JNI。虽然这些都是可行的选择,但如果有人已经有了更好的解决方案,我宁愿自己不维护特定于操作系统的代码。
如果有一个免费的库以可靠的跨平台方式做到这一点,那就太好了(即使它进行外部调用或使用本机代码本身)。
任何建议都非常感谢。
为了澄清,我想获得整个系统的当前CPU使用率,而不仅仅是Java进程。
SIGAR API在一个软件包中提供了我正在寻找的所有功能,因此到目前为止,它是我问题的最佳答案。但是,由于它是根据GPL许可的,我不能将其用于我的原始目的(闭源,商业产品)。Hyperic可能会将SIGAR许可用于商业用途,但我还没有研究过。对于我的GPL项目,我将来肯定会考虑SIGAR。
对于我目前的需求,我倾向于以下内容:
- 对于 CPU 使用率(每个 CPU 的平均负载)
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
- 用于内存,以及
OperatingSystemMXBean.getTotalPhysicalMemorySize()
OperatingSystemMXBean.getFreePhysicalMemorySize()
- 对于磁盘空间,以及
File.getTotalSpace()
File.getUsableSpace()
局限性:
和磁盘空间查询方法仅在 Java 6 下可用。此外,某些 JMX 功能可能并非对所有平台都可用(即,据报道,在 Windows 上返回 -1)。getSystemLoadAverage()
getSystemLoadAverage()
虽然最初是在GPL下授权的,但它已经改为Apache 2.0,它通常可以用于闭源商业产品。