JMX(JavaManagement 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

0_1300781820ZijT.gif

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

0_1300782219eh5h.gif

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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐