- 浏览: 821837 次
- 性别:
- 来自: 北京、四川
文章分类
最新评论
-
sunbeamzheng:
总结的很好,好好看看。 拷贝问题确实很需要注意,特别是影不影响 ...
java深拷贝与浅拷贝 -
xmh8023:
...
获取POST数据的值 -
xmh8023:
我访问别的服务器怎么办?急求
获取POST数据的值 -
xmh8023:
String urlString="http://l ...
获取POST数据的值 -
lv12312:
Tomcat 7的老版本么?有bug的,https://iss ...
JMX问题
因为需要写一个后台监控服务器的程序,涉及到jmx,也涉及到分布式的问题,最初在网上找相关资料的时候很少很少,后来才知道其实jmx这一块相关资料已经很多,java网站上已有比较多的完整例子。
最初使用jmx比较简单,安装java官网的例子很快就写出来了几个例子,但在应用中需要结合tomcat来使用,出现了一些问题,比如获取本地的MBeanServer时出错,网上查了些资料发现需要使用tomcat的一些东西,因此该为如下的方式获取MBeanServer即可
获取远程MBeanServerConnection时则是一个很严重的问题,最初使用如下方法
在一台机器上时并没有出现啥问题,一切运行正常,当我使用两台机器进行测试的时候则会出现异常,这个异常在网上搜了一下,相关的资料却很少很少,虽然自己也能看到后面具体的错误,
这个异常在tomcat启动完成之后,再获取链接则会抛出此异常,不知该咋解决呢,后来想到用rmi的另外一种地址形式,但还是不行,因为都走的是同一个思路。
参考了http://www.docjar.com/html/api/sun/tools/jconsole/ProxyClient.java.html这个网站上的代码,发现获取MBeanServerConnection有两种方式,具体的不是很清楚,只知道本地和远程有一些区别,因此自己试了一下居然就解决了两台机器间获取MBeanServerConnection的问题。修改的代码如下
这样经过测试就顺利解决了多台机器(tomcat)使用jmx的问题
最初使用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的问题
发表评论
-
Java并发编程:volatile关键字解析
2015-07-30 11:30 595转:http://www.cnblogs.com/dolp ... -
Java内存模型
2015-07-29 13:55 8781. 概述 多任务和 ... -
自定义classloader
2015-07-29 13:54 641转:http://tiantian911.iteye.com ... -
自定义ClassLoader实现java应用核心逻辑模块热部署
2015-07-29 13:51 966转:http://blog.csdn.net/zhangda ... -
java classloader原理初探
2015-07-29 10:14 630转:http://www.cnblogs.com/ ... -
Java 内存分配全面浅析
2015-07-29 08:52 575转:http://blog.csdn.net/shimi ... -
http stream
2014-07-29 16:38 1076StringBuilder sb = new String ... -
Tomcat远程调试
2011-04-09 12:33 1037需要在Tomcat中的catalina.bat中添加如下的一行 ... -
call cmd /c start 一点疑问
2010-09-01 10:16 2215call "cmd /c start aaa.bat ... -
Windows计划任务之schtasks
2010-08-30 13:21 3546创建:SCHTASKS /Create /RU SYSTEM ... -
ajax返回值中有中文存在的乱码现象
2010-08-27 16:28 1411ajax返回值中有中文存在的乱码现象,解决就加入下面一行代码即 ... -
MIME TYPE
2010-08-26 16:23 7216最近要做需要在页面上放音频的东西,因此需要用到mime typ ... -
JMX问题
2010-08-20 17:20 5464这个问题貌似是启动tomcat之后就获取不到jmx的链接了,不 ... -
Eclipse控制台乱码
2010-08-05 15:18 4855安装了Eclipse,在运行tomcat时,控制台的中文显示乱 ... -
JMX服务端和客户端的代码
2010-07-27 15:37 3519服务端代码如下 package com.rmi; i ... -
JMX连接Tomcat的JMX测试类
2010-07-27 15:33 3264首先是为了使tomcat支持JMX,必须在tomcat的启动项 ... -
JMX的一个链接类
2010-07-27 09:37 1429package com.pachira.oamp.jmxS ... -
java中文转unicode码
2010-07-22 11:04 43322转载地址:http://www.iteye.com/topic ... -
获取POST数据的值
2010-07-21 14:17 9870当method为POST,Content-Type为 ... -
apache的tomcat负载均衡(两个tomcat)和集群配置(session复制)
2010-06-05 16:24 4556参考地址:http://www.iteye.com/topic ...
相关推荐
环境准备我们这里就不直接演示了,直接配置tomcat的jmx 1、进入到tomcat的bin目录下 # cd /opt/tomcat/apache-tomcat-8.0.48/bin/ 2、编辑配置文件 # vim catalina.sh 3、在下图中上面添加参数 参数...
UserParameter=jmx7[*],/usr/local/zabbix/script/tomcat_status.sh $1 $2 $3 $4 $5 $6 $7 其中jmx5为过滤$1=$2 && $3=$4后, $5项的值 jmx3 为过滤$1=$2后,$3项的值 jmx7 为过滤$1=$2 && $3=$4 && $5=$6...
当你想深入学习jvm的时候,肯定会用到。用于使用jvisualvm.exe远程监控服务器jvm
JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,不过此JVM需要使用可管理的模式启动。如果要把一个应用以可管理的形式启动,可以在启动是设置com.sun.management.jmxremote。JConsole能够提供被监控虚拟机...
3、cpu、ram 监控、导出堆栈信息、查看项目进程端口、服务器状态监控 4、多节点管理、多节点自动分发 5、实时监控项目状态异常自动报警 6、在线构建项目发布项目一键搞定 7、多用户管理,用户项目权限独立(上传、...
得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥验证签名结果,使用公钥初始化签名对象,用于...
用JConsole监控Jetty 如何使用Jetty开发 Jetty HelloWorld教程 Jetty和Maven HelloWorld教程 Jetty(6)入门 (www.itjungle.com) Jetty Start.jar 配置Jetty 如何设置上下文(Context Path) 如何知道使用了那些jar包...
在前端代理服务器后使用Tomcat ix. 64.9. 使用Jetty替代Tomcat x. 64.10. 配置Jetty xi. 64.11. 使用Undertow替代Tomcat xii. 64.12. 配置Undertow xiii. 64.13. 启用Undertow的多监听器 xiv. 64.14. 使用Tomcat7 i...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...