JMX 即 Java Management Extensions Java管理扩展
MBean 即 managed beans 被管理的Beans
一个MBean是一个被管理的Java对象,有点类似于JavaBean,一个设备、一个应用或者任何资源都可以被表示为MBean,MBean会暴露一个接口对外,这个接口可以读取或者写入一些对象中的属性,通常一个MBean需要定义一个接口,以MBean结尾, 例如: EchoMBean, 格式为XXXMBean,这个是规范,必须得遵守。例如:
package com.haitao.jmx;
/**
* JMX MBean Interface
*
* @author haitao.tu
*
*/
public interface EchoMBean {
public void print(String yourName);
}
很简单的,在EchoMBean接口中,定义了一个print方法,带一个yourName的String类型参数,只有接口貌似没什么用,下边我们实现这个接口
package com.haitao.jmx;
/**
* Implements of JMX EchoMBean
*
* @author haitao.tu
*
*/
public class Echo implements EchoMBean {
@Override
public void print(String yourName) {
System.out.println("Hi " + yourName + "!");
}
}
Echo实现了EchoMBean接口,很简单我们只是print了hi yourName!
按照JMX的定义,是被管理的对象,现在我们只是定义了该对象,并没有被管理,接着我们让这个Echo类的实例对象被管理起来:
package com.haitao.jmx;
import java.lang.management.ManagementFactory;
import javax.management.MBeanServer;
import javax.management.ObjectName;
/**
* JMX App Demo
*
* @author haitao.tu
*/
public class App {
public static void main(String[] args) throws Exception {
// 创建MBeanServer
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
// 新建MBean ObjectName, 在MBeanServer里标识注册的MBean
ObjectName name = new ObjectName("com.haitao.jmx:type=Echo");
// 创建MBean
Echo mbean = new Echo();
// 在MBeanServer里注册MBean, 标识为ObjectName(com.tenpay.jmx:type=Echo)
mbs.registerMBean(mbean, name);
// 在MBeanServer里调用已注册的EchoMBean的print方法
mbs.invoke(name, "print", new Object[] { "haitao.tu"}, new String[] {"java.lang.String"});
Thread.sleep(Long.MAX_VALUE);
}
}
1. 首先我们在App类中向ManagementFactory申请了一个MBeanServer对象
2. 接着我们即然要使Echo的实例对象被管理起来,我们就需要给这个对象一个标识,这个标识是ObjectName.注意这个ObjectName构造函数,这里使用了(包名:type=类名)的形式.
3. 然后我们通过mbs.registerMBean方法注册了echo,并传入了ObjectName在MBeanServer中标识该MBean.
4. 随后我们通过mbs.invoke方法调用了已经注册的Echo的print方法,通过ObjectName找到该MBean, 并通过最后两个参数,传入print方法执行的参数,与参数的类型。
5. 最后我们sleep主线程,等待其他线程的调用.
通过这个例子我们可以看出,MBean的好处,在Echo的实例对象未被管理之前,我们只能通过Echo对象的句柄,来调用Echo里的public方法,在被管理之后,我们可以通过MBeanServer的句柄mbs来调用Echo对象的print方法。
更详细的内容,我们可以通过JDK自带工具jconsole或者 VisualVM 来查看MBean:
1.jconsole
jconsole的位置在%JAVA_HOME%\bin\jconsole.exe
开后会看到:
选择com.haitao.jmx.App,然后点击连接, 选择MBean后会看到
这里可以直接调用Echo的print方法, 当然大家看到这里边还有好多其他的table,包括概述、内存、线程、类、VM摘要、MBean。
2.VisualVM
VisualVM的位置在%JAVA_HOME%\bin\jvisualvm.exe
打开后经过连接我们会看到类似的效果:
分享到:
相关推荐
Java分布式应用学习笔记09JMX-MBean的介绍
NULL 博文链接:https://90haofang-163-com.iteye.com/blog/1901416
java
标签:agent-jmx-3.0.1-javadoc.jar,agent,jmx,3.0.1,javadoc,jar包下载,依赖包
tomcat9监控jar包,catalina-jmx-remote java-visualVM专用
tomcat8监控jar包,catalina-jmx-remote java-visualVM专用
tomcat7监控jar包,catalina-jmx-remote java-visualVM专用
很多jmx教程中提到的几个zip jmx-1_2_1-ri.zip jmx_remote-1_0_1_03-ri.zip jmx-1_1-mr-spec.zip
NULL 博文链接:https://90haofang-163-com.iteye.com/blog/1904451
NULL 博文链接:https://90haofang-163-com.iteye.com/blog/1902211
Description Resource Path Location Type Missing artifact com.sun.jmx:jmxri:jar:1.2.1 pom.xml /eshop-storm line 2 Maven Dependency Problem
tomcat-catalina-jmx-remote-9.0.5 tomcat-catalina-jmx-remote-9.0.5.jar
maven编译时报找不到这两个jar文件,发现已经无法从网站...Could not resolve dependencies for project ****:jar:0.0.1-SNAPSHOT: The following artifacts could not be resolved: com.sun.jdmk:jmxtools:jar:1.2.1, ...
Tomcat 8 Extras catalina-jmx-remote.jar,JMX监控所需文件之一。 JMX Remote Lifecycle Listener - org.apache.catalina.mbeans.JmxRemoteLifecycleListener
brew install jmx-dump 旧版本。 用法 使用发行版中的独立二进制文件或jar。 $ jmx-dump --help Dump JMX Metrics Usage: jmx-dump [options] -a, --attrs MBEAN List attributes of mbean MBEAN -c, --creds ...
当你想深入学习jvm的时候,肯定会用到。用于使用jvisualvm.exe远程监控服务器jvm
标签:agent-jmx-3.0-beta-1.jar,agent,jmx,3.0,beta,1,jar包下载,依赖包
jmx-prometheus-httpserver-0.17.2
标签:agent-jmx-3.0-beta-1-sources.jar,agent,jmx,3.0,beta,1,sources,jar包下载,依赖包
标签:agent-car-jmx-3.0-beta-1-sources.jar,agent,car,jmx,3.0,beta,1,sources,jar包下载,依赖包