小编典典

如何在 Java 中监控计算机的 CPU、内存和磁盘使用情况?

all

我想在 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
下授权的,但它已更改Apache
2.0
,它通常可用于封闭源代码的商业产品。


阅读 145

收藏
2022-07-02

共1个答案

小编典典

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

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

2022-07-02