java jmx 监控_利用JMX来监控大部分java应用
JMX(JavaManagement Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。实际上来说我们可以用jmx来监控一些java应用的运行情况,还有自己写的一些服务类的应用。以下是我们用来做监控的jmx源代码packagecom.shine.
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
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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)