我想用 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 changed到Apache 2.0之间,一般可用于封闭源,商业产品.