我想用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()
返回-1在Windows上)。
尽管最初是根据GPL许可的,但已将其更改为Apache 2.0,通常可用于封闭源商业产品。