利用JMX来监控大部分java应用

JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。

   实际上来说我们可以用jmx来监控一些java应用的运行情况,还有自己写的一些服务类的应用。

   以下是我们用来做监控的jmx源代码

 

[java] view plain copy
 
  1. package com.shine.framework.Jmx;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
  6. import javax.management.MBeanServerConnection;  
  7. import javax.management.ObjectName;  
  8. import javax.management.remote.JMXConnector;  
  9. import javax.management.remote.JMXConnectorFactory;  
  10. import javax.management.remote.JMXServiceURL;  
  11.   
  12. public class JMXManager {  
  13.     /** 
  14.      * 建立连接 
  15.      *  
  16.      * @param ip 
  17.      * @param jmxport 
  18.      * @return 
  19.      */  
  20.     public static MBeanServerConnection createMBeanServer(String ip,  
  21.             String jmxport, String userName, String password) {  
  22.         try {  
  23.             String jmxURL = "service:jmx:rmi:///jndi/rmi://" + ip + ":"  
  24.                     + jmxport + "/jmxrmi";  
  25.             // jmx  
  26.             // url  
  27.             JMXServiceURL serviceURL = new JMXServiceURL(jmxURL);  
  28.   
  29.             Map map = new HashMap();  
  30.             String[] credentials = new String[] { userName, password };  
  31.             map.put("jmx.remote.credentials", credentials);  
  32.             JMXConnector connector = JMXConnectorFactory.connect(serviceURL,  
  33.                     map);  
  34.             MBeanServerConnection mbsc = connector.getMBeanServerConnection();  
  35.             return mbsc;  
  36.   
  37.         } catch (Exception e) {  
  38.             // e.printStackTrace();  
  39.             System.err.println(ip + "的中间件不可以达");  
  40.         }  
  41.         return null;  
  42.     }  
  43.   
  44.     /** 
  45.      * 获取所有属性 
  46.      *  
  47.      * @param mbeanServer 
  48.      * @param objName 
  49.      * @return 
  50.      */  
  51.     public static Map getAllAttribute(MBeanServerConnection mbeanServer,  
  52.             ObjectName objName) {  
  53.         if (mbeanServer == null || objName == null)  
  54.             throw new IllegalArgumentException();  
  55.         try {  
  56.             return null;  
  57.         } catch (Exception e) {  
  58.             return null;  
  59.         }  
  60.     }  
  61.   
  62.     /** 
  63.      * 使用MBeanServer获取对象名为[objName]的MBean的[objAttr]属性值 
  64.      * <p> 
  65.      * 静态代码: return MBeanServer.getAttribute(ObjectName name, String attribute) 
  66.      *  
  67.      * @param mbeanServer 
  68.      *            - MBeanServer实例 
  69.      * @param objName 
  70.      *            - MBean的对象名 
  71.      * @param objAttr 
  72.      *            - MBean的某个属性名 
  73.      * @return 属性值 
  74.      */  
  75.     private static Object getAttribute(MBeanServerConnection mbeanServer,  
  76.             ObjectName objName, String objAttr) {  
  77.         if (mbeanServer == null || objName == null || objAttr == null)  
  78.             throw new IllegalArgumentException();  
  79.         try {  
  80.             return String.valueOf(mbeanServer.getAttribute(objName,  
  81.                     "currentThreadsBusy"));  
  82.         } catch (Exception e) {  
  83.             return null;  
  84.         }  
  85.     }  
  86.   
  87. }  

 

 下面我补充一下怎么开启tomcat和weblogic的服务吧

 

 

首先在domain找到需要监控的工程,例如sourceview ,D:/Weblogic/user_projects/domains/sourceview。然后打开它的startWebLogic.cmd的加上 set JAVA_OPTIONS=%JAVA_OPTIONS% 
-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=8050 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=true 
-Dcom.sun.management.jmxremote.access.file=D:/temp/jmxremote.access 
-Dcom.sun.management.jmxremote.password.file=D:/temp/jmxremote.password

 

 

 

 

Tomcat加入jmx监控比weblogic要容易,可以获取到的mib也要比weblogic10要多,首先我 们找到bin目录底下:

 

 

 

 

catalina.bat 用于修改windows的jmx的,catalina.sh用于修改Linux的jmx。具体修改方 法是一样的。
在 rem ----- Execute The Requested Command --------------------------------------- 
加入: 
set JAVA_OPTS=-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=8050 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=true 
-Dcom.sun.management.jmxremote.access.file=D:/temp/jmxremote.access 
-Dcom.sun.management.jmxremote.password.file=D:/temp/jmxremote.password

 

 

如果同样遇到提示 必须限制口令文件的读取权限,可以按照weblogic一样的解决办法。 
或者: 
set JAVA_OPTS=-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=8050 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.access.file=D:/temp/jmxremote.access 
-Dcom.sun.management.jmxremote.password.file=D:/temp/jmxremote.password

附件:temp/jmxremote.access和temp/jmxremote.password

posted on 2016-11-17 15:27  帅胡  阅读(1105)  评论(0编辑  收藏  举报

导航