通过JMX监控管理weblogic的运行
字号: 小 中 大 | 打印发布:2009-5-25 10:18 作者:webmaster 来源: 本站原创 查看:849次
声明
- 声明: 1、任何网站转载本站点内容时需注明来自JAVA-CN.COM,否则我们有权将根据《互联网著作权行政保护办法》追究其相应法律责任;2、JAVA中文站社区刊登此文只为传递信息,并不表示赞同或者反对.
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 .... |
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 |
此外,还可以做的事情有,自己注册一个新的MBean到weblogic的MBeanServer上。总之,通过jmx,我们可以很方便的进行对weblogic进行管理监控。这只是一个JMX的具体应用。在很多领域,JMX大有用武之地。
TAG: JMX Weblogic WebLogic weblogic 管理 运行
最新评论
删除引用Guest (2009-6-1021:42:14, 评分: 0 )
另外,UFO几乎不会进行垃圾回收,消耗CPU很少,在普通的PCServer上用UFO运行网站,平时CPU占用率<0.1%,最多时也不会超过5%。您知道,JVM的垃圾回收会导致大量的运算,消耗很多CPU,从而导致Server的负载能力和响应速度下降。UFO在对象管理方面采用了很好的机制和算法,做得很出色。用UFO运行网站,可以一直保证高负载能力,快速的响应速度和低CPU消耗。