`
canofy
  • 浏览: 828876 次
  • 性别: Icon_minigender_1
  • 来自: 北京、四川
社区版块
存档分类
最新评论

用jmx监控多台服务器(tomcat)

    博客分类:
  • j2EE
阅读更多
    因为需要写一个后台监控服务器的程序,涉及到jmx,也涉及到分布式的问题,最初在网上找相关资料的时候很少很少,后来才知道其实jmx这一块相关资料已经很多,java网站上已有比较多的完整例子。
     最初使用jmx比较简单,安装java官网的例子很快就写出来了几个例子,但在应用中需要结合tomcat来使用,出现了一些问题,比如获取本地的MBeanServer时出错,网上查了些资料发现需要使用tomcat的一些东西,因此该为如下的方式获取MBeanServer即可
/**
	 * 获取本地MBeanServer
	 * @return
	 */
	private MBeanServer getLocalMBServer(){
		MBeanServer mBeanServer = null;
		if (MBeanServerFactory.findMBeanServer(null).size() > 0) {
			mBeanServer =(MBeanServer) MBeanServerFactory.findMBeanServer(null).get(0);
		} else {
			mBeanServer = MBeanServerFactory.createMBeanServer();
		}
		return mBeanServer;
	}


获取远程MBeanServerConnection时则是一个很严重的问题,最初使用如下方法
private MBeanServerConnection getRemoteMBConn(){
//	    String user = "monitorRole";
//	    String pw = "password";
//	    String[] credentials = new String[] { user, pw };
//	    Map<String, String[]> props = new HashMap<String, String[]>();
//	    props.put("jmx.remote.credentials", credentials);
	    JMXServiceURL address;
	    MBeanServerConnection mbs=null;
	    String jmxServerIp=ConfigUtils.getInstance().getOampConfig(OampConstants.JMX_SERVER_IP);//127.0.0.1
	    String jmxServerPort=ConfigUtils.getInstance().getOampConfig(OampConstants.JMX_SERVER_PORT);//9999
		try {
//			address =new JMXServiceURL("service:jmx:rmi:///jndi/rmi://127.0.0.1:9999/jmxrmi");
			address =new JMXServiceURL("service:jmx:rmi:///jndi/rmi://"+jmxServerIp+":"+jmxServerPort+"/jmxrmi");
			JMXConnector connector = JMXConnectorFactory.connect(address, null);
//			address = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1234/jmxrmi");
//			JMXConnector connector = JMXConnectorFactory.connect(address, props);
			mbs= connector.getMBeanServerConnection();
		    connector.connect();
		} catch (Exception e) {
			SrvLogger.error("oamp", ClientMBServerManage.class, "Fail to getRemoteMBConn", e);
		}
	    return mbs;
	}

在一台机器上时并没有出现啥问题,一切运行正常,当我使用两台机器进行测试的时候则会出现异常,这个异常在网上搜了一下,相关的资料却很少很少,虽然自己也能看到后面具体的错误,
ava.io.IOException: Failed to retrieve RMIServer stub: javax.naming.NoInitialContextException: Cannot instantiate class: org.apache.naming.java.javaURLContextFactory [Root exception is java.lang.ClassNotFoundException: org.apache.naming.java.javaURLContextFactory]

这个异常在tomcat启动完成之后,再获取链接则会抛出此异常,不知该咋解决呢,后来想到用rmi的另外一种地址形式,但还是不行,因为都走的是同一个思路。
参考了http://www.docjar.com/html/api/sun/tools/jconsole/ProxyClient.java.html这个网站上的代码,发现获取MBeanServerConnection有两种方式,具体的不是很清楚,只知道本地和远程有一些区别,因此自己试了一下居然就解决了两台机器间获取MBeanServerConnection的问题。修改的代码如下
/**
	 * 获取远程MBeanServerConnection
	 * @return
	 */
	private MBeanServerConnection getRemoteMBConn(String ip,String port){
//	    String user = "monitorRole";
//	    String pw = "password";
//	    String[] credentials = new String[] { user, pw };
//	    Map<String, String[]> props = new HashMap<String, String[]>();
//	    props.put("jmx.remote.credentials", credentials);
		
//	    JMXServiceURL address;
//	    SrvLogger.info(ServerMBClientManage.class,"getRemoteMBConn ip="+ip+";port="+port);
//	    MBeanServerConnection mbs=null;
//		try {
//			address =new JMXServiceURL("service:jmx:rmi://"+ip+"/jndi/rmi://"+ip+":"+port+"/jmxrmi");
//			JMXConnector connector = JMXConnectorFactory.connect(address, null);
//			mbs= connector.getMBeanServerConnection();
		if(StringUtils.isEmpty(ip)||StringUtils.isEmpty(port)){
			return null;
		}
		try{
			MBeanServerConnection mbs=null;
			Registry registry=LocateRegistry.getRegistry(ip, Integer.parseInt(port));
			RMIServer stub=null;
			JMXConnector jmxc=null;
			if (stub == null) {
			   stub = (RMIServer) registry.lookup("jmxrmi");
			}
			jmxc = new RMIConnector(stub, null);
			jmxc.connect();
			mbs=jmxc.getMBeanServerConnection();
		    map.put(ip, mbs);
		    return mbs;
		} catch (Exception e) {
//			e.printStackTrace();
			SrvLogger.error("oamp", ServerMBClientManage.class, "Fail to getRemoteMBConn", e);
		}
	    return null;
	}


这样经过测试就顺利解决了多台机器(tomcat)使用jmx的问题


分享到:
评论

相关推荐

    jmx监控weblogic,tomcat,websphere源码

    在本项目中,"jmx监控weblogic,tomcat,websphere源码"涉及了使用JMX来监控三个主流的Java应用服务器:WebLogic、Tomcat和WebSphere。这些服务器都是企业级应用部署的常见选择,对它们的监控对于确保系统性能、稳定性...

    jmx 监控 tomcat

    在Tomcat这样的Java应用服务器中,JMX能够让我们深入洞察服务器的运行状态,包括内存使用、线程信息、MBean(Managed Beans)的属性和操作等。下面我们将详细介绍如何设置和使用JMX来监控Tomcat。 1. **开启JMX支持...

    Zabbix通过JMX方式监控java中间件

    - 配置Tomcat或其他Java应用的相关JMX监控。 通过以上步骤,可以成功实现Zabbix通过JMX方式对Java中间件的监控。这种方式不仅可以提高监控的灵活性和精确度,还能帮助运维人员更高效地管理复杂的Java应用环境。

    Zabbix通过JMX监控java中间件.docx

    Zabbix 通过 JMX 监控 Java 中间件的工作原理是:Zabbix 服务器想知道一台主机上的特定的 JMX 值时,它向 Zabbix-Java-gateway 询问,而 Zabbix-Java-gateway 使用“JMX management API”去查询特定的应用程序,前提...

    zabbix监控tomcat模版及jar包

    本篇文章将详细介绍如何使用Zabbix监控Tomcat,特别是通过JMX(Java Management Extensions)来监控Tomcat,并涉及到相关的jar包和Zabbix模板。 首先,让我们了解一下`cmdline-jmx`和`catalina-jmx`这两个标签所指...

    cmdline-jmxclient-0.10.3.jar + zabbix tomcat监控模板

    - 配置:在Zabbix服务器上创建JMX监控项,指定Tomcat服务器的地址、端口、用户名和密码(如果Tomcat启用了JMX安全)。 - 模板:`zabbix tomcat监控模板`包含了预设的监控项,如Tomcat的CPU使用率、内存使用、线程...

    jmx_tomcat_jboss

    【标题】:“jmx_tomcat_jboss”指的是在Java管理扩展(JMX)框架下对Tomcat和JBoss服务器的管理和监控。 【描述】:Java管理扩展(JMX)是一种标准,允许开发者创建、管理和监控Java应用程序的组件。在这个上下...

    Monitoring Apache Tomcat with JMX.pdf

    有多种工具可以用来通过JMX监控Tomcat,包括: 1. jconsole:JDK自带的轻量级监控工具,提供GUI界面来查看JVM和应用的运行状况。 2. VisualVM:更强大的JDK工具,包含内存分析、线程分析和CPU剖析等功能。 3. 应用级...

    zabbix 监控 tomcat

    本文将介绍如何使用 Zabbix 通过 JMX 监控 Tomcat,帮助初学的朋友快速上手。 监控 Tomcat 的必要性 Tomcat 作为一个流行的 Java Web 服务器,广泛应用于各种 Web 应用程序中。然而,随着应用程序的复杂度增加,...

    zabbix监控tomcat所需的cmdline-jmxclient-0.10.3.jar和zbx自定义模版

    0.10.3.jar`是一个Java管理扩展(JMX)客户端,它允许通过命令行接口连接到Tomcat服务器,获取和操作JMX MBeans(管理Bean),从而获取Tomcat的运行时信息,如线程池状态、内存使用情况、请求处理时间和更多性能指标...

    tomcat开启远程jmx连接方式

    在Tomcat这样的Java应用服务器中,JMX可以帮助管理员监控和管理Tomcat的运行状态,如线程、内存使用、MBean等。以下是如何在不同版本的Tomcat(5、6、7)以及在Windows环境下开启远程JMX连接的详细步骤。 ### ...

    通过Tomcat开启JMX监控的方法图解

    环境准备我们这里就不直接演示了,直接配置tomcat的jmx  1、进入到tomcat的bin目录下  # cd /opt/tomcat/apache-tomcat-8.0.48/bin/  2、编辑配置文件  # vim catalina.sh  3、在下图中上面添加参数    参数...

    Zabbix监控tomcat所需模板

    2. **Template JMX Tomcat.xml**:此文件可能包含了更具体的JMX监控配置,可能针对Tomcat的特定组件或者提供了额外的监控指标,如Web应用程序的运行情况、Garbage Collector的状态等。 3. **Tomcat.xml**:这个文件...

    tomcat运行状态监控(可自动重启windows脚本).zip

    本文将深入探讨如何使用提供的压缩包文件来实现对Tomcat运行状态的监控,并在出现假死或异常停止时进行自动重启。这个解决方案主要依赖于一个批处理脚本"监控tomcat.bat",以及可能需要的辅助工具如"curl.exe"。 ...

    基于Spring+JMX+Tomcat实现资源动态管理

    JMX与Spring的结合使得开发者能够轻松地创建和管理自定义的管理接口,而Tomcat作为服务器,通过支持JMX提供了丰富的监控和管理点。这种方式有助于实时优化性能,处理异常情况,以及在不重启服务的情况下进行配置更新...

    tomcat 实时监控工具

    8. **性能计数器**:监控服务器的CPU使用率、磁盘I/O、网络吞吐量等硬件资源指标。 9. **配置管理**:允许在线修改部分Tomcat的配置,如修改server.xml或context.xml,但请注意谨慎操作,以免影响正常服务。 10. *...

    zabbix监控多个tomcat资源

    在IT运维管理中,监控系统的重要性不言而喻,尤其对于运行着多个Tomcat应用服务器的环境。Zabbix是一款强大的开源监控解决方案,能够有效地监控网络服务、硬件状态以及应用程序性能。本文将详细讲解如何利用Zabbix来...

    LambdaProbe监控Tomcat 和Jconsole 监控Tomcat

    标题中的“LambdaProbe监控Tomcat”和“Jconsole监控Tomcat”是指两种不同的方式来监控Java应用程序服务器,特别是Apache Tomcat。这两种工具都是为了帮助开发者和运维人员了解Tomcat的运行状态,诊断性能问题,以及...

Global site tag (gtag.js) - Google Analytics