一尘不染

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

java

我想用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()返回-1Windows上)。

尽管最初是根据GPL许可的,但已将其更改为Apache 2.0,通常可用于封闭源商业产品。


阅读 638

收藏
2020-03-04

共1个答案

一尘不染

遵循我在这篇文章中提到的内容。我建议您使用SIGAR API。我在自己的一个应用程序中使用了SIGAR API,这很棒。您会发现它是稳定的,受良好支持的,并且充满了有用的示例。它是开源的,具有GPL 2 Apache 2.0许可证。一探究竟。我感觉它将满足您的需求。

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

2020-03-04