Module  java.management

Package javax.management.monitor

提供监视器类的定义。 监视器是一个MBean,它定期地观察一个或多个其他MBean中属性的值。 如果属性满足某一条件,则监视器发出MonitorNotification 当监视器MBean周期性地调用getAttribute以检索被监视的属性的值时,它将在Monitor.start()调用者的访问控制上下文中执行。

被监视的值可以是复杂类型中包含的简单值。 例如, MemoryMXBean中定义java.lang.management具有属性HeapMemoryUsage类型的MemoryUsage 为了监测所使用的内存量,所描述的used的财产MemoryUsage ,您可以监控“ HeapMemoryUsage.used ”。 那个字符串将是setObservedAttribute的参数。

用于解释ObservedAttribute的规则如"HeapMemoryUsage.used"如下。 假设字符串为Ae (所以A"HeapMemoryUsage"e "used"中的"used" )。

首先得到属性A的值。 叫它v v中提取值x ,如下所示:

  • 如果vCompositeData ,如果v gete )返回一个值,然后x是该值。
  • 如果v是数组, e是字符串"length"x是数组的长度。
  • 如果上述规则不产生一个值,并且如果自省,仿佛通过调用Introspector.getBeanInfo ,为类 getClass() )识别与该名字的属性,则x是读取属性值的结果。

第三条规则是指例如如果属性HeapMemoryUsageMemoryUsage ,则监视"HeapMemoryUsage.used"将通过调用MemoryUsage.getUsed()获得观测值。

如果ObservedAttribute包含多个周期,例如"ConnectionPool.connectionStats.length" ,则上述规则被迭代地应用。 这里, v最初将是属性ConnectionPool的值,并且x将通过应用e等于"connectionStats"的上述规则来"connectionStats" 那么v将被设置为这个x,并且通过再次应用规则得到新的xe等于"length"

虽然建议属性名称是有效的Java标识符,但属性可能被称为HeapMemoryUsage.used 这意味着ObservedAttributeHeapMemoryUsage.used可能意味着要观察的值是该名称的属性,或属性名称为used的属性HeapMemoryUsage 所以出于兼容性原因,当ObservedAttribute包含一个句点( . )时,监视器将检查一个属性是否存在,其名称是完整的ObservedAttribute字符串( HeapMemoryUsage.used中为HeapMemoryUsage.used )。 它通过调用getMBeanInfo为观察到的MBean,并寻找一个包含MBeanAttributeInfo与给定的名称。 如果找到了,那就是被监控的。 如果观察到一个以上的MBean,如果其中一些具有HeapMemoryUsage.used属性,而其他的则没有被指定,则该行为是未指定的。 因此,在这种情况下,一个实现可能getMBeanInfo在一个MBean中调用getMBeanInfo 如果在显示器处于活动状态时检查结果发生变化,那么该行为也是未指定的。

监视器的确切行为详见JMX Specification 以下是一个总结。

有三种显示器:

  • A CounterMonitor观察整数类型的属性。 假设属性是非负的,并且除了在指定模数下可能的滚转之外,单调增加。 每个观察属性都具有关联的值。 当属性超过其阈值时,发送通知。

    可以指定偏移值。 当观测值超过其阈值时,阈值将增加偏移量,或增加足以使阈值大于新观测值的偏移量的倍数。

    A CounterMonitor可以在差模式下工作 在这种模式下,与阈值比较的值是属性的两次连续观察结果之间的差异。

  • A GaugeMonitor观察数值类型的属性。 每个观察属性具有相关联的高阈值低阈值

    当观察到的属性越过高阈值时,如果通知高标志为真,则发送通知。 在阈值变得小于或等于低阈值之前,高阈值的后续交叉将不会触发进一步通知。

    当观察到的属性越过低阈值时,如果通知低标志为真,则发送通知。 在阈值变得大于或等于高阈值之前,低阈值的后续交叉将不会触发进一步通知。

    通常,只有一个通知高和通知低标志被设置。 另一个阈值用于提供滞后机制,以避免当属性围绕阈值产生小的振荡时重复触发通知。

    A GaugeMonitor可以在差模式下工作 在这种模式下,与高和低阈值比较的值是属性的两个连续观察值之间的差异。

  • A StringMonitor观察类型为String属性。 当观察到的属性变得相等和/或不等于给定的字符串时,发送通知。

从以下版本开始:
1.5
另请参见:
Java Platform documentation on JMX technology, in particular the JMX Specification, version 1.4(pdf).