我一直致力于使用 JMX 获取系统指标,例如 CPU、内存、网络 I/O、磁盘 I/O。
对于 CPU,我使用了函数 OperatingSystemMXBean.getSystemLoadAverage() 并获得了 CPU 的负载。
对于内存,我使用了函数 OperatingSystemMXBean.getTotalPhysicalMemorySize() 和 OperatingSystemMXBean.getFreePhysicalMemorySize()。
有没有通过JMX获取网络I/O和磁盘I/O的功能?
大多数虚拟机(全部?)不公开这些数据。您需要使用像sigar这样的库(源在github),它可以收集这些值,然后通过 JMX 公开 sigar 的返回值。
我们在http://rhq-project.org/ 中成功使用了 sigar