我想用Java监视以下系统信息:
当前的CPU使用率*(百分比) 可用内存(可用/总计) 可用磁盘空间(可用/总)
*请注意,我的意思是整个系统可用的整体内存,而不仅仅是JVM。
*
我正在寻找一种不依赖于我自己的调用外部程序或使用JNI的代码的跨平台解决方案(Linux,Mac和Windows)。尽管这些是可行的选择,但如果有人已经有了更好的解决方案,我宁愿自己不要维护特定于操作系统的代码。
如果有一个免费的库以可靠的跨平台方式执行此操作,那将很棒(即使它进行外部调用或本身使用本机代码)也是如此。
任何建议,不胜感激。
为了澄清,我想获得整个系统的当前CPU使用率,而不仅仅是Java进程。
SIGAR API在一个软件包中提供了我正在寻找的所有功能,因此,这是迄今为止我所提问题的最佳答案。但是,由于它是根据GPL许可的,因此我不能将其用于原始用途(封闭源,商业产品)。Hyperic可能会将SIGAR许可用于商业用途,但我尚未对此进行调查。对于我的GPL项目,将来肯定会考虑使用SIGAR。
对于我当前的需求,我倾向于以下方面:
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
OperatingSystemMXBean.getTotalPhysicalMemorySize()
OperatingSystemMXBean.getFreePhysicalMemorySize()
File.getTotalSpace()以及File.getUsableSpace()
局限性:
在getSystemLoadAverage()和磁盘空间查询方法仅可用的Java 6此外,根据一些JMX功能可能无法适用于所有平台(即它的报道,getSystemLoadAverage()返回-1在Windows上)。
getSystemLoadAverage()
-1
Windows
尽管最初是根据GPL许可的,但已将其更改为Apache 2.0,通常可用于封闭源商业产品。
遵循我在这篇文章中提到的内容。我建议您使用SIGAR API。我在自己的一个应用程序中使用了SIGAR API,这很棒。您会发现它是稳定的,受良好支持的,并且充满了有用的示例。它是开源的,具有GPL 2 Apache 2.0许可证。一探究竟。我感觉它将满足您的需求。
使用Java和Sigar API,您可以获得内存,CPU,磁盘,平均负载,网络接口信息和度量,进程表信息,路由信息等。