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

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

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

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

package com.shine.framework.Jmx; import java.util.HashMap; import java.util.Map; import javax.management.MBeanServerConnection; import javax.management.ObjectName; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; public class JMXManager { /** * 建立连接 * * @param ip * @param jmxport * @return */ public static MBeanServerConnection createMBeanServer(String ip, String jmxport, String userName, String password) { try { String jmxURL = "service:jmx:rmi:///jndi/rmi://" + ip + ":" + jmxport + "/jmxrmi"; // jmx // url JMXServiceURL serviceURL = new JMXServiceURL(jmxURL); Map map = new HashMap(); String[] credentials = new String[] { userName, password }; map.put("jmx.remote.credentials", credentials); JMXConnector connector = JMXConnectorFactory.connect(serviceURL, map); MBeanServerConnection mbsc = connector.getMBeanServerConnection(); return mbsc; } catch (Exception e) { // e.printStackTrace(); System.err.println(ip + "的中间件不可以达"); } return null; } /** * 获取所有属性 * * @param mbeanServer * @param objName * @return */ public static Map getAllAttribute(MBeanServerConnection mbeanServer, ObjectName objName) { if (mbeanServer == null || objName == null) throw new IllegalArgumentException(); try { return null; } catch (Exception e) { return null; } } /** * 使用MBeanServer获取对象名为[objName]的MBean的[objAttr]属性值 *

* 静态代码: return MBeanServer.getAttribute(ObjectName name, String attribute) * * @param mbeanServer * - MBeanServer实例 * @param objName * - MBean的对象名 * @param objAttr * - MBean的某个属性名 * @return 属性值 */ private static Object getAttribute(MBeanServerConnection mbeanServer, ObjectName objName, String objAttr) { if (mbeanServer == null || objName == null || objAttr == null) throw new IllegalArgumentException(); try { return String.valueOf(mbeanServer.getAttribute(objName, "currentThreadsBusy")); } catch (Exception e) { return null; } } }

 下面我补充一下怎么开启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

 

你可能感兴趣的:(core,JAVA)