- 当前CPU使用率**(百分比)
- 可用内存*(空闲/总共)
可用磁盘空间(空闲/总共)
*注意,我的意思是整个系统可用的内存,而不仅仅是JVM。
我正在寻找一种跨平台解决方案(Linux、Mac和Windows),它不依赖于我自己调用外部程序或使用JNI。尽管这些是可行的选择,但如果有人已经有更好的解决方案,我更愿意不自己维护特定于操作系统的代码。
如果有一个免费的库以可靠且跨平台的方式实现此功能,那就太好了(即使它会调用外部程序或使用本地代码)。
非常感谢任何建议。
要澄清的是,我想获取整个系统的当前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许可证发布的,但它已更改为Apache 2.0,通常可用于闭源、商业产品。