首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

GlassFish广泛地应用了JMX技术。除了通过AMX来简化对MBean的访问外,GlassFish还提供了对JMX的消息和监控方面的扩展。

本章将先介绍从JMX的消息机制衍生而来的自管理(Self Management)技术,接着将介绍GlassFish的另一个JMX扩展:内置的性能探查器CallFlow。

本章重点:

l   自管理的管理规则

l   自管理的实现和开发

l   CallFlow的架构

l   CallFlow应用

16.1  自  管  理

GlassFish的自管理技术为用户深入、灵活地进行应用服务器的管理提供了便捷的途径。

16.1.1  自管理概述

自管理技术的核心是管理规则(Management Rule)的定制。管理规则由用户自定义,描述的是在何种事件触发时完成何种相应的处理。管理规则交由系统去执行,系统执行所依赖的正是JMX的事件机制。

自管理技术是为了使应用服务器的架构更加开放和可扩展。它包括:

l   自调整(Self-tuning)。

l   自配置(Self-configuring)。

l   自恢复(Self-healing)。

自管理应用的特点是高度可定制化。何时触发以及如何管理都可以由用户自行定制。这种定制是通过系统或自行创建的MBean来实现的。通过自管理技术,用户可以更深入地参与系统的管理。典型的自管理应用包括以下几方面的内容。

(1)   数据库连接过多时,对Connector/JDBC连接池的自动调整和配置。

(2)   EJB性能下降时,对ORB线程池的自动调整和配置。

(3)   负载过大时,挂起实例和线程。

(4)   Web请求过多时,对Web容器线程池Thread Pool的自动调整和配置。

(5)   JVM参数的自动优化。

(6)   日志文件过大时进行各种磁盘管理。

(7)   MQ中出现死亡队列消息(Dead Queue Message)时,发出警告。

(8)   内存泄漏或内存不足时,发出警告。

16.1.2  管理规则与JMX消息机制

管理规则是自管理执行的依据。管理规则由用户通过管理控制台或命令行工具asadmin预先设定。管理规则将一个事件(Event)和一个动作(Action)进行了绑定,它描述了当某事件发生时所要对应执行的动作,如图16-1所示。

图16-1  管理规则示意图

事件和动作是管理规则的两部分,事件定义的是什么时候做,动作定义的是做什么。管理规则和JMX技术密切关联,它可以看成是JMX的消息(Notification)机制实现的翻版:管理规则涉及两个MBean,一个是发出事件的MBean(称作Event MBean),另一个是完成动作的MBean(称作Action MBean),二者被管理规则关联在一起。这两个MBean都是普通的MBean,唯一的要求是实现动作的MBean需实现JMX接口javax.management.NotificationListener。

管理规则之所以可以轻松地描述MBean之间的事件,是因为有JMX标准的支撑。Event MBean和Action MBean之间的关系类似Java Bean事件机制中的Event Source和Listener之间的关系,Java Bean事件机制中Event Source需要维护一个Listener的列表,而因为MBean服务器统一维护着各个MBean实例,所以自管理省略了这一过程。此外,标准的JMX消息接口也使得执行动作的MBean不必为各类事件实现不同的接口。

16.1.3  管理规则的定义和实例

各个管理规则都被以XML的形式存放在domain.xml文件中。针对不同的事件,管理规则有着不同的语法要求。

【例16.1】一个计数器监视器的管理规则:

<management-rule name="Rule2" enabled="true">

<event level="INFO" record-event="true" type="monitor">

        <property name="monitortype" value="countermonitor"/>

        <property name="initthreshold" value="10"/>

        <property name="numbertype" value="long"/>

        <property name="observedmbean" value="EntityStatsMBean"/>

        <property name="observedattribute"

value="ReadyCount.highWaterMark"/>

    </event>

<action action-mbean-name="CustomBean"/>

</management-rule name>

【例16.2】一个LifeCycle事件的管理规则:

<management-rule name="Rule3" enabled="true">

<event level="INFO" record-event="true" type="lifecycle">

        <property name="name" value="termination"/>

</event>

<action action-mbean-name="CustomBean"/>

</management-rule name>

有关管理规则的完整定义,请参见例16.3所示的DTD Schema。

【例16.3】管理规则的DTD Schema:

<!ELEMENT config
(http-service, iiop-service, admin-service, connector-service?, web-container, ejb-container, mdb-container, jms-service?, log-service, security-service, transaction-service, monitoring-service, java-config, availability-service?, thread-pools, alert-service?, management-rules, system-property*, property*)>
<!-- self management rules的容器(Container)
enabled:更高级别地禁用全部规则。如果是false,所有的规则被禁用,如果是true,则交由具体规则的设定来决定是否启用

-->
<!ELEMENT management-rules(management-rule*)>
<!ATTLIST management-rules
    enabled   %boolean;   "true"

<!—定义self management规则的要素:
    name                management rule名
    enabled             是否启用规则,默认是false

action-mbean-ref    Action MBean的名称

-->

<!ELEMENT management-rule (event, properties*) >

<!ATTLIST management-rule

name              CDATA       #REQUIRED
     enabled           %boolean;   "true"
     action-mbean-ref  CDATA       #REQUIRED
>
<!--  定义规则相应的event。每个规则都有一个event -->
<!ELEMENT event (properties*) >

<!ATTLIST event
    type %event_type #IMPLIED
>
<!-- event类型 -->
<!ENTITY %event_type
  "(log | timer | trace | monitor | gms | lifecycle | notification)"

>

管理规则重点描述如何指定Event。下面对此重点介绍。

16.1.4  自管理的事件(Event)

管理规则中的事件必须是JMX的消息。管理规则支持的事件被分为以下3类。

l   监控事件(Monitor Event):JSR-77所定义的Java EE各部件的可统计的属性所触发的事件。

l   JMX消息(JMX Notification):这里特指自定义MBean所发出的事件。此类MBean需实现JMX接口javax.management.NotificationBroadcaster和NotificationEmitter。

l   预定义事件(Predefined Event):这其中又包括Lifecycle Event、Log Event、Timer Event、Trace Event。

每个事件都会要求不同的动作和配置来完成管理规则。进一步的说明请看表16-1。

表16-1  自管理关键字段说明

特  性

字  段

说  明

Monitor Event

Observed MBean

MBean的对象名,其格式如下:

domain:type=implementation-class-name, name=implementation-class-name

Observed Attribute

要监控的MBean属性

Granularity Period

间隔时间。用于周期性地获取属性

monitor type

监控器可以是以下三种类型:

——计数(Count)型监控器,当数值变更幅度超出预设时被触发

——尺度(Gauge)型监控器,当数值超出预设的上下限时被触发

——字符串(String)型监控器,当字符串变更时被触发

                                                                                                                                                                        续表

特  性

字  段

说  明

Notification Event

Class Name

自定义MBean的类名

notification type

Notification类型

Lifecycle Event

Event

GlassFish组件的生命周期事件,包括Ready、Shutdown

和Termination

Log Event

Logger

日志接口的类名

level

日志级别

Timer Event

Date String

规则有效的开始日期

Pattern

要搜索的模式,默认模式为mm/dd/yyyy hh:mm:ss

Period

消息发送给MBean的间隔时间

Number of

Occurrence

在消息中模式匹配出现的次数

Message

当模式匹配上时,写入日志的信息

Trace Event

event

由CallFlow触发的事件。具体包括以下类型。

ejb_component_method_entry:将调用EJB的business方法

ejb_component_method_exit:结束执行EJB business方法

web_component_method_entry:将调用Web服务

web_component_method_exit:Web服务结束执行

request_start:服务器收到新的HTTP或IIOP请求

request_end:HTTP或IIOP请求结束

16.1.5  创建管理规则

管理规则的定制可以通过管理控制台和命令行进行。

命令行工具asadmin关于管理规则的子命令如下。

(1)   创建管理规则:

asadmin>create-management-rule –action <action-mbean-name> --eventtype <monitor|notification|timer|log|gms|trace|lifecyle> [--eventproperties (property=value[:property=value]*)] [--config <config>] <rule-name>

(2)   删除管理规则:

asadmin>delete-management-rule [--config <config>] <rulename>

(3)   列举管理规则:

asadmin>list-management-rules [config]

管理控制台提供了图形化的向导来完成管理规则的定制。此向导分成两步完成,第一步指定规则中的事件,第二步根据事件类型完成动作和相关配置。

16.1.6  自管理的实现代码

自管理的代码实现位于Admin模块中,相关代码提示请参见表16-2。

表16-2  自管理代码阅读提示

想了解

请查看

自管理实现文件位置

com.sun.enterprise.admin.selfmanagement

管理规则中相关的Event和 Listener接口

com.sun.enterprise.admin.selfmanagement.event

如何生成各类event

com.sun.enterprise.admin.selfmanagement

如何执行管理规则并提供自管理服务

com.sun.enterprise.management.selfmanagement

管理控制台界面如何定制管理规则

com.sun.enterprise.tools.admingui.handlers.ManagementRulesHandler

如何处理管理规则的增删改

com.sun.enterprise.management.selfmanagement.reconfig

如何记录自管理的相关信息

com.sun.logging.enterprise.system.core.selfmanagement

TraceEvent的组成

com.sun.enterprise.admin.selfmanagement.event.TraceEventImpl

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论