javax.management.monitor

接口
异常
提供 monitor 类的定义。

请参见:
          描述

接口摘要
CounterMonitorMBean 公开计数器监视器 MBean 的远程管理接口。
GaugeMonitorMBean 公开尺度监视器 MBean 的远程管理接口。
MonitorMBean 公开监视器 MBean 的远程管理接口。
StringMonitorMBean 公开字符串监视器 MBean 的远程管理接口。
 

类摘要
CounterMonitor 定义专门用来观察计数器属性值的监视器 MBean。
GaugeMonitor 定义专门用来观察尺度属性值的监视器 MBean。
Monitor 定义所有监视器 MBean 的公共部分。
MonitorNotification 提供对监视器 MBean 发送的通知的定义。
StringMonitor 定义设计用于观察字符串属性值的监视器 MBean。
 

异常摘要
MonitorSettingException 当监视器设置在运行监视器期间变得无效时由该监视器抛出的异常。
 

软件包 javax.management.monitor 的描述

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

被监视的值可以是一个包含在复合类型中的简单值。例如,java.lang.management 中定义的 MemoryMXBean 具有一个类型为 MemoryUsageHeapMemoryUsage 属性。要监视已用 内存量(由 MemoryUsageused 属性描述),您可以监视 "HeapMemoryUsage.used"。该字符串应该做为 setObservedAttribute 的参数。

用来解释 "HeapMemoryUsage.used" 之类的 ObservedAttribute 的规则如下。假设字符串为 A.e(因此在该例中 A"HeapMemoryUsage"e"used")。

首先获得属性 A 的值。称之为 v。按以下方式从 v 中提取值 x

  • 如果 vCompositeDatav.get(e) 返回一个值,则 x 就是返回的那个值。
  • 如果 v 是数组且 e 为字符串 "length",则 x 为该数组的长度。
  • 如果以上规则无法生成一个值,且类 v (v.getClass()) Introspector.getBeanInfo 包含一个具有名称 ePropertyDescriptor,则 x 为对 v 调用属性读取方法的结果。

第三个规则意味着,如果属性 HeapMemoryUsageMemoryUsage,则监视 "HeapMemoryUsage.used" 将获得调用 MemoryUsage.getUsed() 观察到的值。

如果 ObservedAttribute 包含一个以上的句号 ("."),例如 "ConnectionPool.connectionStats.length",则迭代地应用上述规则。其中 v 最初是属性 ConnectionPool 的值,x 是在 e 等于 "connectionStats" 的情况下应用上述规则导出的。然后 v 将被设置为此 x,并将在 e 等于 "length" 的情况下导出一个新的 x

建议使用有效的 Java 标识符作为属性名称,但将属性取名为 HeapMemoryUsage.used 也是可能的。这意味着作为 HeapMemoryUsage.usedObservedAttribute 表示要观察的值可能是该名称的属性,也可能是一个名为 HeapMemoryUsage 的属性内部的属性 used。故出于兼容性原因,当 ObservedAttribute 包含一个句号 (.) 时,监视器将检查是否存在一个名称为完整 ObservedAttribute 字符串(示例中的 HeapMemoryUsage.used)的属性。它实现这一点的方式如下:对被观察的 MBean 调用 getMBeanInfo,并使用给定名称查询被包含的 MBeanAttributeInfo。如果能找到,则它就是被监视的内容。如果正观察多个 MBean,且其中一些有 HeapMemoryUsage.used 属性而另一些却没有时,行为是不确定的。在这种情况下,一个实现可能因此只对其中一个 MBean 调用 getMBeanInfo。如果在监视器激活的情况下检查的结果发生更改,则行为也是不确定的。

JMX 规范》中详细叙述了监视器的具体行为。下面是有关的概述。

共有三种监视器:

  • CounterMonitor 观察整数类型的属性。假定这些属性为非负数,并且单调递增(以指定的 进行的可能回滚 除外)。每个 observed 属性都具有相关的阈值。当属性超过其阈值时将发出一个通知。

    可以指定一个偏移量 值。当被观察值超过其阈值时,该阈值应按偏移量递增,或者按偏移量的倍数递增,以使其阈值足大于新的被观察值。

    CounterMonitor 可以在不同的模式 下操作。在本模式中,与阈值比较所得的值就是对属性的两次连续观察值之间的差分。

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

    当 observed 属性超过高阈值时,如果 notify high 标记为 true,则发送一个通知。在尺度值变得小于或等于低阈值之前,后续的超出高阈值的情况不会触发更多的通知。

    当 observed 属性低于低阈值时,如果 notify low 标记为 true,则发送一个通知。在尺度值变得小于或等于高阈值之前,后续的超出低阈值的情况不会触发更多的通知。

    一般情况下,仅设置 notify high 和 notify low 标志中的一个。使用其他阈值来提供滞后 机制,以避免属性值在阈值附近进行小幅度摆动时重复触发通知。

    GaugeMonitor 可以在不同的模式 操作。在本模式中,与高、低阈值相比得出的值就是对属性的两次连续观察值之间的差分。

  • StringMonitor 观察类型为 String 的属性。当 observed 属性变得等于和/或不等于指定的字符串时,将发出一个通知。

从以下版本开始:
1.5
另请参见:
Java SE 6 Platform documentation on JMX technology, 特别是 JMX Specification, version 1.4(pdf)。