在写WebLogic监控程序的过程中,可以说是相当坎坷,因为因为我要支持监控WebLogic不同版本,而WebLogic不同版本对JMX的支持却有着不小的区别,在网上也没有找到完整的解决方案,所以只能自己一点点的摸索,如今终于拨云见日了,OMG。在此,我们只探讨监控WebLogic 8.x的解决方案,其他版本后续跟进,我会整理出一个完整的文章。为什么监控WebLogic 8.x要先单独写个文章呢——因为8.x跟新的9.x和10.x不一样,刚开始入手会遇到很麻烦的问题。如果我入手之前能看到这篇文章,嘿嘿,那就谢天谢地了。
好了,不啰嗦了,我们开始:
首先第一条,要访问WebLogic Server 8.x的MBeans,必须是在JDK1.4环境下,否则会很麻烦(需要写自己classloader),原因如下:
Java代码
因为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");这样的设置可以解决问题,经试验根本不行。
使用JMX访问WebLogic Server 8.x的MBeans,需要使用的JAR包是weblogic.jar、webservices.jar
可以在%WL_HOME%\server\lib目录下找到。
如果只加入weblogic.jar包,有些API可以访问,但是运行MBeanHome->getAllMBeans()方法获取所有MBean时会抛异常:
Java代码
weblogic.rjvm.PeerGoneException: ; nested exception is:
weblogic.utils.NestedException: Ljavax/xml/soap/SOAPException; - with nested exception:
[java.lang.NoClassDefFoundError: Ljavax/xml/soap/SOAPException;]
at weblogic.rjvm.BasicOutboundRequest.sendReceive(BasicOutboundRequest.java:108)
at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:164)
at weblogic.management.internal.AdminMBeanHomeImpl_815_WLStub.getAllMBeans(Unknown Source)
at cn.chenfeng.jmx.weblogic.ListAllMBeans.main(ListAllMBeans.java:27)
Caused by: weblogic.utils.NestedException: Ljavax/xml/soap/SOAPException; - with nested exception:
[java.lang.NoClassDefFoundError: Ljavax/xml/soap/SOAPException;]
at weblogic.rjvm.RJVMImpl.gotExceptionReceiving(RJVMImpl.java:967)
at weblogic.rjvm.ConnectionManager.gotExceptionReceiving(ConnectionManager.java:930)
at weblogic.rjvm.t3.T3JVMConnection.hasException(T3JVMConnection.java:870)
at weblogic.socket.SocketMuxer.deliverExceptionAndCleanup(SocketMuxer.java:588)
at weblogic.socket.SocketMuxer.deliverHasException(SocketMuxer.java:544)
at weblogic.socket.JavaSocketMuxer.processSockets(JavaSocketMuxer.java:306)
at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
--------------- nested within: ------------------
weblogic.rmi.extensions.RemoteRuntimeException: Unexpected Exception - with nested exception:
[weblogic.rjvm.PeerGoneException: ; nested exception is:
weblogic.utils.NestedException: Ljavax/xml/soap/SOAPException; - with nested exception:
[java.lang.NoClassDefFoundError: Ljavax/xml/soap/SOAPException;]]
at weblogic.management.internal.AdminMBeanHomeImpl_815_WLStub.getAllMBeans(Unknown Source)
at cn.chenfeng.jmx.weblogic.ListAllMBeans.main(ListAllMBeans.java:27)
加入webservices.jar包就可以解决问题了。
下面展示一下我自己跑的Demo
Java代码
package cn.chenfeng.jmx.weblogic;
import java.util.Iterator;
import java.util.Set;
import javax.naming.Context;
import weblogic.jndi.Environment;
import weblogic.management.Helper;
import weblogic.management.MBeanHome;
import weblogic.management.WebLogicMBean;
import weblogic.management.WebLogicObjectName;
import weblogic.management.runtime.RuntimeMBean;
public class JMXDemo1 {
public static void main(String[] args) throws Exception {
final String providerUrl = "t3://192.168.1.2:7001";
final String username = "chenfeng";
final String password = "chenfeng";
MBeanHome adminHome = (MBeanHome) Helper.getAdminMBeanHome(username,
password, providerUrl);
System.out.println("DomainName : " + adminHome.getDomainName());
/*
* 获取MBeanHome的另一个方法,Helper内部就是通过这种方法实现的
*/
{
Environment env = new Environment();
env.setProviderUrl(providerUrl);
env.setSecurityPrincipal(username);
env.setSecurityCredentials(password);
Context ctx = env.getInitialContext();
MBeanHome localHome2 = (MBeanHome) ctx
.lookup(MBeanHome.LOCAL_JNDI_NAME);
MBeanHome adminHome2 = (MBeanHome) ctx
.lookup(MBeanHome.ADMIN_JNDI_NAME);
System.out.println("DomainName : " + localHome2.getDomainName());
System.out.println("DomainName : " + adminHome2.getDomainName());
}
{
Set mbeans = adminHome.getMBeansByType("ServerRuntime");
System.out.println("ServerRuntime MBeans : " + mbeans);
}
/*
* JDBC连接池
*/
{
System.out
.println("\n===============获取JDBC连接池信息==================");
Set mbeans = adminHome.getMBeansByType("JDBCConnectionPoolRuntime");
System.out.println("JDBCConnectionPoolRuntime MBeans : " + mbeans);
Iterator itt = mbeans.iterator();
while (itt.hasNext()) {
RuntimeMBean mbean = (RuntimeMBean) itt.next();
String name = mbean.getName();
int count = Integer.parseInt(mbean.getAttribute(
"ActiveConnectionsCurrentCount").toString());
System.out.println("【JDBCConnectionPoolRuntime --> " + name
+ " --> ActiveConnectionsCurrentCount】: " + count);
}
}
/*
* 线程池
*/
{
System.out.println("\n===============获取线程池信息==================");
Set mbeans = adminHome.getMBeansByType("ThreadPoolRuntime");
System.out.println("ThreadPoolRuntime MBeans : " + mbeans);
Iterator itt = mbeans.iterator();
while (itt.hasNext()) {
RuntimeMBean mbean = (RuntimeMBean) itt.next();
String name = mbean.getName();
int count = Integer.parseInt(mbean.getAttribute(
"ExecuteThreadIdleCount").toString());
System.out.println("【ThreadPoolRuntime --> " + name
+ " --> ExecuteThreadIdleCount】: " + count);
}
}
/*
* 获取所有的MBean信息
*/
{
System.out
.println("\n===============打印从AdminHome获得的所有MBean==================");
Set allMBeans = adminHome.getAllMBeans();
System.out.println("MBean的总数目:" + allMBeans.size());
for (Iterator itr = allMBeans.iterator(); itr.hasNext();) {
WebLogicMBean mbean = (WebLogicMBean) itr.next();
WebLogicObjectName objectName = mbean.getObjectName();
System.out.println(objectName.getName() + " is a(n) "
+ mbean.getType());
}
}
}
}
分享到:
相关推荐
在本项目中,"jmx监控weblogic,tomcat,websphere源码"涉及了使用JMX来监控三个主流的Java应用服务器:WebLogic、Tomcat和WebSphere。这些服务器都是企业级应用部署的常见选择,对它们的监控对于确保系统性能、稳定性...
四、Weblogic 9.1.x 的常见问题与解决方案 1. 服务器启动失败:检查日志文件,排查错误信息,可能的原因包括配置错误、依赖库缺失等。 2. 性能优化:调整服务器参数,如增大内存分配,优化JVM参数,提升并发处理能力...
此外,它还集成了Oracle Identity and Access Management解决方案。 5. **性能优化**:通过JRockit或JDK集成,WebLogic Server可以提供高性能的运行环境。它支持动态缓存、线程池管理和数据源连接池,以提高应用...
总的来说,《WebLogic10+配置部署手册》是一份全面而实用的参考资料,它不仅提供了WebLogic Server 10.x的详细配置和部署步骤,还可能涵盖了相关最佳实践和常见问题解决方案,是IT从业者提升WebLogic技能的宝贵资源...
可以配置硬件负载均衡器或使用软件解决方案(如Apache mod_proxy),确保请求在两个应用服务器间均匀分布。 8. **监控和管理**:集成后的环境需要统一的监控和管理工具。可以通过JMX(Java Management Extensions)...
- 常见问题及解决方案:列举WebLogic Server运行中可能出现的问题,并给出解决建议。 通过本套培训资料,你将全面掌握WebLogic Server的使用,无论是初学者还是经验丰富的管理员,都能从中受益,提升在企业级Java ...
WebLogic Server是一款由甲骨文公司提供的企业级Java应用程序服务器,它是基于Java EE(Java Platform, ...通过深入研究这些材料,开发者可以更好地适应企业级开发环境,为复杂的企业应用提供可靠的解决方案。
Zabbix是一款广泛使用的开源监控软件,它能够对各种操作系统(如Linux、Windows)以及...为确保成功安装,建议仔细阅读Zabbix的官方文档,同时,保持对Zabbix社区的支持和更新跟踪,以便获取最新的解决方案和安全补丁。
【JRockit监控Linux下WebLogic】是一种针对Java应用程序,特别是WebLogic服务器的高级监控解决方案。JRockit是由Oracle开发的一款高性能、低内存消耗的Java虚拟机,特别适合用于诊断和解决内存泄漏问题。在大型企业...
同时,提供的文档如`weblogic.doc`和`EclipseWebLogic1.1.1.pdf`将提供更深入的指导,包括可能遇到的问题解决方案和最佳实践。 记住,配置过程可能会因Eclipse版本和WebLogic版本的不同而略有差异,所以根据实际...
1. 集群概念:集群是WebLogic的一种高可用性和可扩展性解决方案,将多个独立的服务器实例组合成一个逻辑单元,它们之间共享负载并提供故障转移能力。 2. 创建集群:在WebLogic管理控制台中,创建一个新的集群,为每...
- 开启JMX(Java Management Extensions)以远程监控JVM和WebLogic服务器。 以上调优策略只是基础,实际调优过程需要结合具体应用环境和负载情况进行。持续监控、测试和调整是保证WebLogic服务器高效运行的关键。
此外,WebLogic还支持Coherence,一个分布式缓存解决方案,用于提升数据访问速度。 WebLogic作为企业级应用服务器,其深入理解和熟练操作对于IT专业人员至关重要。本次培训旨在帮助初学者快速掌握WebLogic的基础...
Oracle提供了WebLogic Standard Edition(标准版)、WebLogic Enterprise Edition(企业版)以及WebLogic Suite(套件)三种不同的版本,每个版本在功能上有所差异,旨在为用户提供最适合其业务需求的解决方案。...
这部分可能涉及WebLogic的高可用性解决方案,如集群、故障恢复策略、备份和恢复等。 十、WebLogic最新版本特性 随着WebLogic的版本更新,新功能和改进不断推出。学习资料可能会涵盖最新版本的特性,如支持Java EE的...
WebLogic是Oracle公司的一款强大的Java企业版(JEE)...从安装配置到应用部署,再到集群管理和安全性,WebLogic都提供了完善的解决方案。通过深入了解和熟练使用这些功能,开发者可以构建出高效、安全的分布式系统。
WebLogic提供了一些内置的诊断工具,如JMX Console、WLST(WebLogic Scripting Tool)和JConsole,可以帮助管理员监控服务器状态,收集诊断信息,甚至执行远程操作来调试问题。 7. **社区支持** 当遇到难以解决的...
- **性能优化**:调整JVM内存设置,启用JMX监控,优化网络配置。 ### 六、维护与更新 1. **补丁与更新**:定期检查Oracle官方发布的补丁集和更新,保持服务器安全和性能。 2. **备份与恢复**:对Domain配置和应用...
2. 监控工具:介绍WebLogic内置的JMX(Java Management Extensions)监控工具和其他第三方监控解决方案。 3. 性能优化:探讨内存设置、线程池调整、应用部署优化等方面的策略,提升WebLogic的运行效率。 4. 故障排查...