モジュール java.management

パッケージ javax.management.monitor

モニター・クラスを定義します。 Monitorは、1つ以上のその他のMBeanに含まれる属性の値を定期的に観測するMBeanです。 属性が特定の条件を満たす場合、MonitorはMonitorNotificationを発行します。 モニターMBeanが監視中の属性の値を取得するためにgetAttributeを周期的に呼び出す場合、呼出し側Monitor.start()のアクセス制御コンテキスト内でこれを実行します。

監視する値は、複合型の内部に含まれた単純な値にすることができます。 たとえば、java.lang.management内で定義されたMemoryMXBeanは、MemoryUsage型のHeapMemoryUsage属性を持ちます。 MemoryUsageusedプロパティで示されるusedメモリーの量を監視するには、HeapMemoryUsage.usedを監視します。 この文字列が、setObservedAttributeの引数になります。

HeapMemoryUsage.usedなどのObservedAttributeを解釈するための規則は、次のようになります。 文字列がA.e (この例では、AHeapMemoryUsageeused)であるものとします。

最初に、属性Aの値が取得されます。 これをvとします。 次のようにして、vから値xが抽出されます。

  • vCompositeDataで、かつv.get(e)が値を返す場合、xはその値です。
  • vが配列で、かつeが文字列lengthである場合、xは配列の長さです。
  • 前述の規則で値が生成されない場合、およびvのクラス(v.getClass())のイントロスペクションによって(Introspector.getBeanInfoを呼び出すときと同様に)、名前eを含むプロパティが識別される場合、そのプロパティ値が読み取られた結果はxになります。

3番目の規則について考えましょう。たとえば、属性HeapMemoryUsageMemoryUsageである場合、HeapMemoryUsage.usedを監視すると、MemoryUsage.getUsed()が呼び出されて監視対象の値が取得されます。

ConnectionPool.connectionStats.lengthのようにObservedAttributeに、複数のピリオドが含まれる場合、前述の規則が繰返し適用されます。 ここで、vは初期状態では属性ConnectionPoolの値になります。xは、econnectionStatsを等価にして前述の規則を適用することで得られます。 次に、vがこのxに設定されます。新しいxは、elengthを等価にして規則を再度適用することで得られます。

属性名は、有効なJava識別子にすることが推奨されていますが、HeapMemoryUsage.usedにすることも可能です。 このため、ObservedAttributeHeapMemoryUsage.usedであるとすると、監視対象の値がその名前の属性である場合と、HeapMemoryUsageという名前の属性内部のusedプロパティである場合とが考えられます。 互換性を維持するため、ObservedAttributeにピリオド(.)が含まれる場合、モニターは、名前が完全なObservedAttribute文字列(この例ではHeapMemoryUsage.used)である属性が存在するかどうかをチェックします。 具体的には、監視対象のMBeanに対してgetMBeanInfoを呼び出し、中に含まれる指定した名前のMBeanAttributeInfoを検索します。 検索しているものが見つかった場合、それが監視対象です。 監視対象のMBeanが複数存在し、HeapMemoryUsage.used属性を保持するものと保持しないものがある場合、動作は未定義になります。 このため、この場合、実装により、1つのMBeanに対してのみgetMBeanInfoが呼び出されることがあります。 モニターがアクティブである間に検査結果が変更される場合にも、動作は未定義になります。

モニターの厳密な動作の詳細は、『JMX仕様』に記載されています。 次に、概要を示します。

次の3種類のMonitorがあります。

  • CounterMonitorは、整数型の属性を監視します。 属性は、負の数ではないと想定され、指定されたモジュラスロールオーバーが起こらなければ、その値は単調に増加します。 監視対象の各属性には、しきい値が関連付けられています。 属性がしきい値を超過すると、通知が送信されます。

    オフセット値を指定できます。 監視対象の値がしきい値を超過すると、しきい値はオフセット分、またはしきい値が新しい監視値より大きい値になるために必要なオフセットの倍数分大きくなります。

    CounterMonitor差分モードで動作できます。 このモードでは、しきい値に対して比較される値は、2回の連続する属性の観測値の差分になります。

  • GaugeMonitorは、数値型の属性を監視します。 監視対象の各属性には、上限値下限値が関連付けられています。

    監視対象の属性の値が上限値を超過したとき、上限通知フラグの値がtrueであれば、通知が送信されます。 その後は、上限値を超過しても、ゲージ値が下限値以下になるまで通知は送信されません。

    監視対象の属性の値が下限値を超過したとき、下限通知フラグの値がtrueであれば、通知が送信されます。 その後は、下限値を超過しても、ゲージ値が上限値以上になるまで通知は送信されません。

    通常、設定されるのは上限通知または下限通知のいずれかです。 その他のしきい値は、属性値がしきい値の近辺で細かく増減しても、通知が繰返しトリガーされるのを防ぐヒステリシス・メカニズムを提供するために使用されます。

    GaugeMonitor差分モードで動作できます。 このモードでは、上限値および下限値に対して比較される値は、2回の連続する属性の観測値の差分になります。

  • StringMonitorは、String型の属性を監視します。 監視対象の属性が指定された文字列と等しくなったり、等しくなくなったりすると、通知が送信されます。

導入されたバージョン:
1.5
関連項目:
JMX仕様、バージョン1.4