admin 管理员组文章数量: 887021
2024年1月17日发(作者:idea导入tomcat服务器)
因为需要写一个后台监控服务器的程序,涉及到jmx,也涉及到分布式的问题,最初在网上找相关资料的时候很少很少,后来才知道其实jmx这一块相关资料已经很多,java网站上已有比较多的完整例子。
最初使用jmx比较简单,安装java官网的例子很快就写出来了几个例子,但在应用中需要结合tomcat来使用,出现了一些问题,比如获取本地的MBeanServer时出错,网上查了些资料发现需要使用tomcat的一些东西,因此该为如下的方式获取MBeanServer即可
Java代码
1. /**
2. * 获取本地MBeanServer
3. * @return
4. */
5. private MBeanServer getLocalMBServer(){
6. MBeanServer mBeanServer = null;
7. if (eanServer(null).size() > 0) {
8. mBeanServer =(MBeanServer) eanServer(null).get(0);
9. } else {
10. mBeanServer = MBeanServer();
11. }
12. return mBeanServer;
13. }
获取远程MBeanServerConnection时则是一个很严重的问题,最初使用如下方法
Java代码
1. private MBeanServerConnection getRemoteMBConn(){
2. // String user = "monitorRole";
3. // String pw = "password";
4. // String[] credentials = new String[] { user, pw };
5. // Map
6. // ("tials", credentials);
7. JMXServiceURL address;
8. MBeanServerConnection mbs=null;
9. String jmxServerIp=tance().getOampConfig(_SERVER_IP);//127.0.0.1
10. String jmxServerPort=tance().getOampConfig(_SERVER_PORT);//9999
11. try {
12.// address =new JMXServiceURL("service:jmx:rmi:///jndi/rmi://127.0.0.1:9999/jmxrmi");
13. address =new JMXServiceURL("service:jmx:rmi:///jndi/rmi://"+jmxServerIp+":"+jmxServerPort+"/jmxrmi");
14. JMXConnector connector = t(address, null);
15.// address = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1234/jmxrmi");
16.// JMXConnector connector = t(address, props);
17. mbs= anServerConnection();
18. t();
19. } catch (Exception e) {
20. ("oamp", , "Fail to getRemoteMBConn", e);
21. }
22. return mbs;
23. }
在一台机器上时并没有出现啥问题,一切运行正常,当我使用两台机器进行测试的时候则会出现异常,这个异常在网上搜了一下,相关的资料却很少很少,虽然自己也能看到后面具体的错误,
Java代码
1. ption: Failed to retrieve RMIServer stub: ialContextException: Cannot instantiate class: LContextFactory [Root exception is otFoundException: LContextFactory]
这个异常在tomcat启动完成之后,再获取链接则会抛出此异常,不知该咋解决呢,后来想到用rmi的另外一种地址形式,但还是不行,因为都走的是同一个思路。
参考了/html/api/sun/tools/jconsole/这个网站上的代码,发现获取MBeanServerConnection有两种方式,具体的不是很清楚,只知道本地和远程有一些区别,因此自己试了一下居然就解决了两台机器间获取MBeanServerConnection的问题。修改的代码如下
Java代码
1. /**
2. * 获取远程MBeanServerConnection
3. * @return
4. */
5. private MBeanServerConnection getRemoteMBConn(String ip,String port){
6. // String user = "monitorRole";
7. // String pw = "password";
8. // String[] credentials = new String[] { user, pw };
9. // Map
10.// ("tials", credentials);
11.
12.// JMXServiceURL address;
13.// (,"getRemoteMBConn ip="+ip+";port="+port);
14.// MBeanServerConnection mbs=null;
15.// try {
16.// address =new JMXServiceURL("service:jmx:rmi://"+ip+"/jndi/rmi://"+ip+":"+port+"/jmxrmi");
17.// JMXConnector connector = t(address, null);
18.// mbs= anServerConnection();
19. if(y(ip)||y(port)){
20. return null;
21. }
22. try{
23. MBeanServerConnection mbs=null;
24. Registry registry=istry(ip, nt(port));
25. RMIServer stub=null;
26. JMXConnector jmxc=null;
27. if (stub == null) {
28. stub = (RMIServer) ("jmxrmi");
29. }
30. jmxc = new RMIConnector(stub, null);
31. t();
32. mbs=anServerConnection();
33. (ip, mbs);
34. return mbs;
35. } catch (Exception e) {
36.// tackTrace();
37. ("oamp", , "Fail to getRemoteMBConn", e);
38. }
39. return null;
40. }
版权声明:本文标题:用jmx监控多台服务器(tomcat) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1705423532h484197.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论