• 通过JMX监控管理weblogic的运行


    http://www.java-cn.com/club/html/04/n-5404.html

    通过JMX监控管理weblogic的运行

    字号:       | 打印发布:2009-5-25 10:18    作者:webmaster    来源: 本站原创   查看:849次


    声明
    • 声明: 1、任何网站转载本站点内容时需注明来自JAVA-CN.COM,否则我们有权将根据《互联网著作权行政保护办法》追究其相应法律责任;2、JAVA中文站社区刊登此文只为传递信息,并不表示赞同或者反对.
    1.JMX概述

      JMX(Java ManagementExtensions)是SUN创建的一套规范。BEA WebLogicServer实现了JMX大部分的API,并且提供了一个完全兼容JMX的控制台来管理各种资源。OPENSOURCE的应用服务器JBoss也是基于JMX来实现。并且对之评价很高,认为是目前为止最好的软件集成工具。JBoss的成功依靠于JMX。

      (载自JBoss在线文档,原文是:Our goal is to providethe full J2EE stack in the free/open world. We are already thereand the reason for our success lies on JMX. JMX or Java ManagementeXtension is the best weapon we have found for integration ofsoftware. It provides a common spine in which we plug in modules,containers and plugins. )

      关于JMX的具体描述不是这篇短文所能完成的(我也是初学,比你知道的多不了多少)。这里只是简短的描述一下,方便大家理解。有兴趣的可以下载JMX文档(java.sun.com)

      JMX specification定义的overall managementarchitecture如下

      Instrumentation level

      Agent level

      Distributed services level

      Additional management protocol APIs(比如SNMP协议,TMN等)

      不考虑附加的管理协议API,整个结构分为三个层次Instrumentationlevel,Agent level, Distributed serviceslevel.名字我就不翻译了,以免引起误解。JMX1.0白皮书上有一张很好的图示,描述的很清楚。简要的说,Instrumentationlevel定义了一套被管理的资源需要遵守的规范。这里被管理资源是一个很广泛的概念。可以是一个应用程序,一个具体的类,一个服务,甚至一个硬件。不过,所有的资源都是由java语言开发的,其它的资源需要提供一个java封装。在JMX中,被管理的资源被封装为ManagedBean,简称MBean.MBean是对所有资源的一种抽象。目前,JMX定义了四种类型的MBean:standard,dynamic, open and model MBeans.其中, open MBean ,model MBean继承自dynamic MBean。不过,在1.0中openMBean的定义并没有完成,但是根据规范的描述,其提供的功能确实令人激动。SUN公司也承诺将来openMbean会成为JMX产品强制实现的部分。此外,Instrumentationlevel还定义了JMX Notification Model以及MBean MetadataClasses。MBean通过JMX NotificationModel将其状态变化的消息通知管理程序和Agent。Agent通过Metadata获得MBean的信息。

      Instrumentation level具体的细节这里不再描述。

      

     

         The agent level provides a specification for implementing agents.Management

      agents directly control the resources and make them availableto remote

      management applications.

      A JMX agent is a management entity which runs in a JVM andacts as the liaison

      between the MBeans and the management application. A JMXagent is composed of

      an MBean server, a set of MBeans representing managedresources, a minimum number

      of agent services implemented as MBeans, and typically atleast one protocol adaptor or

      connector.

      The distributed services level provides the interfaces forimplementing JMX

      managers. This level defines management interfaces andcomponents that can

      operate on agents or hierarchies of agents.

     

      2.Weblogic6.1的实现

      weblogic6.1采用sun的JMX参考实现(在weblogic.jar里包含了com.sun.management包和javax.management包),不过自己又加入了一些新的特性。我注意到的有以下一些:

      a.定义接口WebLogicMBean,该接口继承了DynamicMBean(上面描述的dynamicMBean必须实现的接口),MBeanRegistration(用于MBean在Agent注册),NotificationBroadcaster(用于发送Notification,参见JMXNotificationModel)。所有的weblogic的MBean都是该接口的子类。也就是说,weblogic里面所有的MBean都是dynamicMBean,当然,你也可以自己写一些standardMBean注册到weblogic的Agent上去。

      WebLogicMBean主要具有以下三种类型的MBeans:

      Administration MBeans,封装从config.xml读取的整个weblgoicdomain的配置信息。

      Configuration MBeans, 每个weblogicserver一份,是AdministrationMBeans的copy,用于server配置自己

      Runtime MBeans, 代表着运行时刻WebLogicServer的各种组件和子系统。

      我们通过weblogic提供的HTMl形式的控制台对weblogic的配置操作,最终都通过调用AdministrationMBeans实现,在系统运行结束时写回config.xml配置文件。明白了这些,你也就完全可以写一个Swing格式的控制台或者来对weblogic进行配置。或者说,对于最终用户比较关心的JDBC数据源的信息,你完全可以自己写一个图形界面来配置。从而不让用户通过浏览器进入weblogic自己带的console进行操作。这样就可以避免用户修改一些很关键的系统信息。

      在weblogic server的JMXAgent的视图里,一个EJB组件,一个JDBC数据源都是RuntimeMBeans,甚至weblgoic自己的shutdown类也是一个RuntimeMBeans。weblogic为各种资源定义了不同的子RuntimeMBeans接口。

      比如对大家都熟悉的EJB来说,就定义了接口EJBRuntimeMBean,而且更详细的是,对于不同的Bean还定义了不同子接口,比如:EntityEJBRuntimeMBean,MessageDrivenEJBRuntimeMBean, StatefulEJBRuntimeMBean,StatelessEJBRuntimeMBean。

      当我们调用一个EJB的某个方法时,请求会首先送到JMX的Agent,Agnet根据请求确定要访问哪一个RuntimeMBeans,然后调用该RuntimeMBeans的方法,这是通过DynamicMBean的方法invoke(java.lang.StringactionName, java.lang.Object[] params, java.lang.String[]signature)(actionName:要调用的方法名;params:参数数组;signature:该方法的型构)来实现的,invoke的返回结果就是被调用的ejb的方法的返回结果。最后,将结果返回给调用者。

      b.为MBean定义了Home接口,这是JMX1.0规范所没有的,这样,对于应用程序来说就可以像访问EJB那样在远程首先通过JNDI查找该MBean的Home接口,获得Home接口后就可以获得该MBean,然后,就可以通过MBean对资源进行管理操作。这个流程与EJB几乎完全一样。

      而且,更方便的是,weblogic提供了一个类weblogic.management.Helper,该类通过了一组静态方法getMBeanHome可以非常方便的得到MBeanHome对象。他的用法下面的例子将会说明

      3.一个小例子

      下面的程序编已通过并在weblogic6.1运行成功。

      其中getMBeanHome参数中12345678是我的weblogic的system的用户密码,SERVER_NAME是我的weblogic的sever的名字,可以在config.xml中找到。

      TestJMX执行后,将打印出我的weblogic上所有的MBean

      ----源程序TestJMX.java--------------------------------------------------------------

      

     

         import java.util.*;

      import weblogic.management.*;

      public class TestJMX

      { public MBeanHome localHome;

      public MBeanHome adminHome ;

      public static String SERVER_NAME = "myserver";

      public void find()

      { String url = "t3://127.0.0.1:7001" ;

      try { localHome =(MBeanHome)Helper.getMBeanHome("system","12345678",url,SERVER_NAME);

      adminHome =(MBeanHome)Helper.getAdminMBeanHome("system","12345678",url);

      System.out.println("Local and Admin Homes found using theHelper class");

      } catch (IllegalArgumentException iae)

      { System.out.println("Illegal Argument Exception: " +iae);

      }

      }

      public static void main(String[] args )

      { TestJMX test = new TestJMX();

      test.find();

      Set allMBeans =test.localHome.getAllMBeans();

      System.out.println("Size: " + allMBeans.size());

      for (Iterator itr = allMBeans.iterator();

      itr.hasNext();

      )

      {

      WebLogicMBean mbean = (WebLogicMBean)itr.next();

      WebLogicObjectName objectName = mbean.getObjectName();

      System.out.println(objectName.getName() +" isa"+mbean.getType());

      }

      Set all2MBeans =test.adminHome.getAllMBeans();

      System.out.println("Size: " + all2MBeans.size());

      for (Iterator itr = all2MBeans.iterator();

      itr.hasNext();

      )

      {

      WebLogicMBean mbean = (WebLogicMBean)itr.next();

      WebLogicObjectName objectName = mbean.getObjectName();

      System.out.println(objectName.getName() +" isa"+mbean.getType());

      }

      }

      }

     

     --------------------------------------------------------------------------------------

      下面是它的运行输出结果中的部分,我们看到,从weblogic返回的WebLogicMBean包括了几乎所有的内容。

      (DBManagerDataSource是我在weblogic自己配的JDBC数据源;unix是我在weblogic自己配的一个web应用;Process_CRM是一个部署的EJB;eos10是weblogic自己实现的SNMPAgent)

      

         ....

      eos10 isa(n) SNMPAgentConfig

      eos10 isa(n) SNMPAgent

      unix isa(n) WebAppComponent

      roleejb isa(n) Application

      eos10 isa(n) SNMPAgentConfig

      DBManagerDataSource isa(n) JDBCTxDataSource

      ....

      你也可以调用MBeanHome的getMBean方法获得自己感兴趣的某种MBean对象,具体的用法参见weblogic6.1文档得到了这些MBean的引用后,就可以设置他的属性,调用他的方法等等。而且,你还可以把他造型为更具体的子类,比如,对于SNMPAgent,你可以直接造型为SNMPAgentMBean(WeblogicMBean的子接口),这样就可以执行一些网络管理指令,获得网络管理信息(我对SNMP一窍不通,如果说的不好,见笑了),SNMPAgentMBean提供了如下操作:

     

      

         boolean addSNMPAttributeChange(SNMPAttributeChangeMBean attrchange)

      boolean addSNMPCounterMonitor(SNMPCounterMonitorMBeancountermonitor)

      boolean addSNMPGaugeMonitor(SNMPGaugeMonitorMBeangaugemonitor)

      boolean addSNMPProxy(SNMPProxyMBean snmpProxy)

      boolean addSNMPStringMonitor(SNMPStringMonitorMBeanstringmonitor)

      void setSNMPLogFilters(SNMPLogFilterMBean[]snmpLogFilters)

      void setSNMPPort(int port) voidsetSNMPProxies(SNMPProxyMBean[] snmpProxys)

      void setSNMPStringMonitors(SNMPStringMonitorMBean[]snmpStringMonitors)

      void setTargetedTrapDestinations(SNMPTrapDestinationMBean[]snmpTrapDestinations)

      void setUserDefinedMib(java.lang.String mibName

      自己做一个监听类挂上去就可以实现监控,具体的接口方法参见weblogic文档

     

      此外,还可以做的事情有,自己注册一个新的MBean到weblogic的MBeanServer上。总之,通过jmx,我们可以很方便的进行对weblogic进行管理监控。这只是一个JMX的具体应用。在很多领域,JMX大有用武之地。



    TAG: JMX Weblogic WebLogic weblogic 管理 运行
    查看全部1条评论

    最新评论

    • 删除引用Guest (2009-6-1021:42:14, 评分: 0 )

      www.gm365.com上发布的webserver软件UFO不会出现一个字节的内存泄漏和一个线程的不能回收,使用UFO做WebServer的好处是网站能做得很稳定,永远也不会自己down掉;UFO在托管机房丢包率很高、遭受Hacker攻击、互联网骨干网被黑等恶劣的环境条件下仍然能很好地运行;UFO在对付Hacker方面(防Hacker弄down和Hacker抓取不该访问的资源)也有足够措施。
      另外,UFO几乎不会进行垃圾回收,消耗CPU很少,在普通的PCServer上用UFO运行网站,平时CPU占用率<0.1%,最多时也不会超过5%。您知道,JVM的垃圾回收会导致大量的运算,消耗很多CPU,从而导致Server的负载能力和响应速度下降。UFO在对象管理方面采用了很好的机制和算法,做得很出色。用UFO运行网站,可以一直保证高负载能力,快速的响应速度和低CPU消耗。
     
     
     
  • 相关阅读:
    端口转发工具ngr0k
    深入理解JavaScript系列(2):揭秘命名函数表达式(转)
    SQL Server DATEDIFF() 函数
    em(倍)与px的区别
    左右页面布局
    深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点(转)
    《JavaScript高级程序设计》(第二版)
    autocomplete 之 ASP.NET
    JQuery 优缺点略谈
    几个常见CSS错误和解决办法
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276716.html
Copyright © 2020-2023  润新知