如何在Java中监视计算机的CPU、内存和磁盘使用情况?
我想用Java监控以下系统信息:
我正在寻找一种跨平台解决方案(Linux、Mac和Windows),它不依赖于我自己调用外部程序或使用JNI的代码。虽然这些都是可行的选择,但如果有人已经有了更好的解决方案,我宁愿自己不维护操作系统特定的代码。
如果有一个免费的库以可靠的、跨平台的方式实现这一点,那将是很棒的(即使它进行外部调用或使用本机代码本身)。
任何建议都是非常感谢的。
为了澄清,我想了解整个系统当前的CPU使用情况,而不仅仅是Java进程(ES)。
SIGARAPI提供了我在一个包中寻找的所有功能,因此它是迄今为止对我的问题的最好回答。但是,由于它是根据GPL授权的,我不能将它用于我原来的目的(一个封闭的来源,商业产品)。Hyperic可能会授权SIGAR用于商业用途,但我还没有对它进行研究。对于我的GPL项目,我肯定会在未来考虑SIGAR。
就我目前的需要而言,我倾向于以下几点:
- 对于CPU的使用,
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
(每个CPU平均负载) - 为了回忆,
OperatingSystemMXBean.getTotalPhysicalMemorySize()
和OperatingSystemMXBean.getFreePhysicalMemorySize()
- 对于磁盘空间,
File.getTotalSpace()
和File.getUsableSpace()
限制:
这个getSystemLoadAverage()
而且磁盘空间查询方法只能在Java 6下使用。另外,一些JMX功能可能并不适用于所有平台(例如,据报道,getSystemLoadAverage()
返回-1在Windows上)。
虽然最初在GPL下获得许可,但它已经改变了到Apache2.0,一般可用于封闭源、商用产品。