我想在 Java 中监控以下系统信息:
*请注意,我指的是整个系统可用的总内存,而不仅仅是 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()在 Windows 上返回 -1)。
getSystemLoadAverage()
虽然最初是在 GPL 下授权的,但它已更改为Apache 2.0,它通常可用于封闭源代码的商业产品。
按照我在这篇文章中提到的内容。我建议您使用SIGARAPI。我在自己的一个应用程序中使用了 SIGAR API,它很棒。你会发现它很稳定,得到很好的支持,并且有很多有用的例子。它是具有 GPL 2 Apache 2.0 许可证的开源软件。一探究竟。我感觉它会满足你的需求。
使用 Java 和 Sigar API,您可以获得内存、CPU、磁盘、平均负载、网络接口信息和指标、进程表信息、路由信息等。