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

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

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

*请注意,我的意思是整个系统可用的整体内存,而不仅仅是JVM.

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

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

任何建议都非常感谢.

为了澄清,我想获得整个系统的当前CPU使用率,而不仅仅是Java进程.

SIGAR API在一个软件包中提供了我正在寻找的所有功能,因此它是迄今为止我的问题的最佳答案.但是,由于它是根据GPL许可的,我不能将它用于我的原始目的(封闭源,商业产品). Hyperic可能会将SIGAR许可用于商业用途,但我还没有调查过.对于我的GPL项目,我将来肯定会考虑SIGAR.

根据我目前的需求,我倾向于以下方面:

>对于CPU使用情况,OperatingSystemMXBean.getSystemLoadAverage()/ OperatingSystemMXBean.getAvailableProcessors()(每个CPU的平均负载)
>对于内存,OperatingSystemMXBean.getTotalPhysicalMemorySize()和OperatingSystemMXBean.getFreePhysicalMemorySize()
>对于磁盘空间,File.getTotalSpace()和File.getUsableSpace()

限制:

getSystemLoadAverage()和磁盘空间查询方法仅在Java 6下可用.此外,某些JMX功能可能并非对所有平台都可用(即,据报道getSystemLoadAverage()在Windows上返回-1).

虽然最初根据GPL许可,但它在has been changedApache 2.0之间,一般可用于封闭源,商业产品.

最佳答案
按照我提到的in this post行.我建议你使用SIGAR API.我在我自己的一个应用程序中使用SIGAR API,这很棒.你会发现它是稳定的,得到很好的支持,并且充满了有用的例子.它是开源的,具有GPL 2 Apache 2.0许可证.看看这个.我觉得它会满足你的需求.

使用Java和Sigar API,您可以获得内存,CPU,磁盘,负载平均,网络接口信息和指标,进程表信息,路由信息等.

转载注明原文:如何在Java中监视计算机的CPU,内存和磁盘使用情况? - 代码日志