监控WebLogic 8.x的解决方案(监控应用服务器系列文章三)
前言:最近在做一个监控应用服务器(Tocmat、WebSphere、WebLogic)的项目,目前已小有规模,回头看看,一路走来,也算是磕磕绊绊,遇到过种种问题,走过不少弯路,不过程序员最不怕的就是遇到问题——有什么问题就解决什么问题。为了留下点印记,为后来人留下点经验之谈,助之少走弯路,特意把这些经验整理出来,与大家分享。水平有限,如有疏漏,还望指正
??
?
在写WebLogic监控程序的过程中,可以说是相当坎坷,因为因为我要支持监控WebLogic不同版本,而WebLogic不同版本对JMX的支持却有着不小的区别,在网上也没有找到完整的解决方案,所以只能自己一点点的摸索,如今终于拨云见日了,OMG。在此,我们只探讨监控WebLogic 8.x的解决方案,其他版本后续跟进,我会整理出一个完整的文章。为什么监控WebLogic 8.x要先单独写个文章呢——因为8.x跟新的9.x和10.x不一样,刚开始入手会遇到很麻烦的问题。如果我入手之前能看到这篇文章,嘿嘿,那就谢天谢地了。
?
好了,不啰嗦了,我们开始:
首先第一条,要访问WebLogic Server 8.x的MBeans,必须是在JDK1.4环境下,否则会很麻烦,原因如下:
?
因为WebLogic 8.x的weblogic.jar中有自己的javax.management包,而JDK1.5中也有javax.management包(以前版本没有),运行时会优先调用JDK1.5中javax.management包里的类,因此产生错误。而且weblogic8.x支持JMX 1.0,而JDK1.5支持JMX1.2 。
?
网上有人说通过System.setProperty("jmx.serial.form", "1.0");这样的设置可以解决问题,经试验根本不行。
?
如果要在JDK5+环境下监控WebLogic Server 8.x,需要写自己classloader,屏蔽JDK自己的javax.management包,转而加载weblogic.jar中的javax.management包。
?
?
使用JMX访问WebLogic Server 8.x的MBeans,需要使用的JAR包是weblogic.jar、webservices.jar。可以在%WL_HOME%\server\lib目录下找到。
?
如果只加入weblogic.jar包,有些API可以访问,但是运行MBeanHome->getAllMBeans()方法获取所有MBean时会抛异常:
加入webservices.jar包就可以解决这个问题了。?
下面展示一下我自己跑的Demo? 1 楼 Dead_knight 2012-06-07 很早之前也搞过这玩意
http://dead-knight.iteye.com/blog/853008
主要是服务卡死、jvm不足等等问题能及时短信提醒维护人员进行处理。其次就是能监控到队列,可以把耗时的队列记录到日志里,方便性能优化 2 楼 yunzhu 2012-06-07 Dead_knight 写道很早之前也搞过这玩意
http://dead-knight.iteye.com/blog/853008
主要是服务卡死、jvm不足等等问题能及时短信提醒维护人员进行处理。其次就是能监控到队列,可以把耗时的队列记录到日志里,方便性能优化
呵呵,我们做的这个一大堆的软件硬件都要监控