有时想在程序中启用JMX,通过JMX监控和操作进程中的线程及变量。
一、JMX 入门StandardMBean三部曲
1.创建一个管理接口
1).该接口需要是public修饰符
2).接口命名最好以MBean结尾(<Business-object>MBean.java )
3).如果是read-only的属性,那么接口中最好只有getXXX、isXXX这样的方法;如果是write-only的属性,那么接口中最好只有setXXX方法;
如果read-write的属性,那么接口中最好是setXXX、getXXX这样的方法对儿,像Java Bean.
2.实现这个接口
1).接口实现类需要是public修饰符
2).需要实现上面的接口(implements <Business-object>MBean.java),并继承javax.management.StandardMBean类(非必须)
3).接口实现类命名最好是上面接口去掉MBean后的名称(<Business-object>.java)
3.注册MBean,并传入数据
1).调用接口实现类中的方法,传入数据
2).注册MBean(MBeanServer.registerMBean(Object object, ObjectName name)
object - The MBean to be registered as an MBean.
name - The object name of the MBean. May be null.
注册StandardMBean实例:
1.创建一个管理接口
package com.tdy218.weblogic;
public interface JVMPropMBean {
public String getJVMPID();
}
2.实现这个接口
package com.tdy218.weblogic;
import javax.management.NotCompliantMBeanException;
import javax.management.StandardMBean;
public class JVMProp extends StandardMBean implements JVMPropMBean {
String jvmpid = null;
public JVMProp(Class<JVMPropMBean> mbeanInterface) throws NotCompliantMBeanException {
super(mbeanInterface);
}
public String getJVMPID() {
return jvmpid;
}
public void setJVMPID(String jvmpid) {
this.jvmpid = jvmpid;
}
}
3.注册并推入数据
package com.tdy218.tools.jvm;
String jvmPid = .....;
JVMProp jvmProp = new JVMProp(JVMPropMBean.class);
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName jvmPropMBean = new ObjectName("com.tdy218.weblogic:type=JVMPropMBean");
mbs.registerMBean(jvmProp, jvmPropMBean);
jvmProp.setJVMPID(jvmPid);
二、启动时加入以下设置参数
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=192.168.0.234
-Dcom.sun.management.jmxremote.port=9008
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access
三、JMX管理工具
JDK自带的jconsole程序,主要可以查看JMX的属性和调用方法
JDK自带的jvisualvm程序,主要可视化的监视进程运行情况