【发布时间】:2010-09-08 00:16:51
【问题描述】:
我想用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 下授权的,但它 has been changed 到 Apache 2.0,通常可用于闭源、商业产品。
【问题讨论】:
-
澄清一下,sigar api 为您获取系统信息。如果你想要 jvm 信息,请使用 JMX。
-
SIGAR 在 GPL 下并不妨碍您使用它,它只是意味着您必须联系作者并请求替代许可。作者通常乐于接受少量费用并允许商业许可。
-
由于 SIGAR 1.6.4 版本使用的是 Apache 许可证。
-
您知道如何获取每个处理器的负载吗?
标签: java memory cross-platform cpu diskspace