JMX详解

一、概念

JMX(Java Management
Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架,JMX的核心类是MBean(准确说是接口),用来描述一个可管理的资源

JMX的三层架构图

Probe Level负责资源的检测(获取信息),包含MBeans,通常也叫做Instrumentation Level。

The Agent Level 或者叫做MBean Server(代理服务器) ,是JMX的核心,连接Mbeans和远程监控程序。

Remote Management Level通过connectors和adaptors来远程操作MBean Server。


二、简单实例

1.建立一个需要被JMX管理的类Hello

Java代码

package bcndly.test.jmx;    
   
public class Hello implements HelloMBean {    
        
    private String name;    
   
    public String getName() {    
        return name;    
    }    
   
    public void printHello() {    
        System.out.println("Hello, " + name);    
    }    
   
    public void printHello(String theName) {    
        System.out.println("Hello, " + theName);    
    }    
   
    public void setName(String name) {    
        this.name = name;    
    }    
   
}


2.建立Hello类的MBean接口

接口名必须是要管理的类名+MBean,接口定义了要暴露的属性和方法

Java代码

package bcndly.test.jmx;    
   
public interface HelloMBean {    
        
    public String getName();    
   
    public void setName(String name);    
   
    public void printHello();    
   
    public void printHello(String theName);    
}

3.创建一个Agent类

Java代码

package bcndly.test.jmx;    
   
import javax.management.MBeanServer;    
import javax.management.MBeanServerFactory;    
import javax.management.ObjectName;    
   
import com.sun.jdmk.comm.HtmlAdaptorServer;    
   
public class HelloAgent {    
   
    public static void main(String[] args) throws Exception {    
        MBeanServer server = MBeanServerFactory.createMBeanServer();    
        ObjectName helloName = new ObjectName("bcndyl:name=HelloWorld");    
        server.registerMBean(new Hello(), helloName);    
        ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter");    
        HtmlAdaptorServer adapter = new HtmlAdaptorServer();   
        adapter.setPort(8091);
        server.registerMBean(adapter, adapterName);    
        adapter.start();    
        System.out.println("start.....");    
    }   
   
}

首先获得MBean Server,之后便可将需要管理的MBean注册到MBean Server中,注册MBean需要定义其对象名称,对象名称类型为ObjectName,这里对象名称必须由域名加一个或多个键值对组成,这里bcndyl为域名,后面的即为键值对。最后我们让线程保持睡眠,以便可以让Manager连接过来管理暴露的MBean。


4.管理MBean

运行HelloAgent,打开IE输入http://localhost:8091就可以看到注册的MBean

点击MBean对象后可以管理对象的属性和方法

测试方法printHello,eclipse控制台打印对应信息

说明:

  • HtmlAdaptorServer在jmxtools.jar包中
  • MBeanServer是一个包含所有注册MBean的仓库.它是JMX代理层的核心.JMX1.0规范提供一个接口叫
    javax.management.MBeanServer.
    所有管理的在MBean操作通过MBeanServer执行.使用MBeanServer实例,你能够管理所有MBean.每一个MBean具有一个唯一标志,叫ObjectName.
  • ObjectName (javax.management.ObjectName)是一个类,唯一标志一个在MBeanServer的MBean.这个对象名称用于管理应用程序来标志MBean以便操作能够在适当的MBean上被调用.
  • AdaptorServer,这个类将决定MBean的管理界面,这里用最普通的Html型界面。AdaptorServer其实也是一个MBean
时间: 2024-09-21 18:32:56

JMX详解的相关文章

JConsole使用手册详解

一篇Sun项目主页上介绍JConsole使用的文章,前段时间性能测试的时候大概翻译了一下以便学习,今天整理一下发上来,有些地方也不知道怎么翻,就保留了原文,可能还好理解点,呵呵,水平有限,翻的不好,大家多多包涵. JConsole毕竟是JDK自带的东西,功能虽然没有一些商业软件那么强大,但是稳定性好,在大压力情况下也不会发生什么问题.而且,提供了相对全面的系统监控功能,还是值得一用的. JConsole JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,不过此JVM需要使用

Spring中的jar包详解

下面给大家说说spring众多jar包的特点吧,无论对于初学spring的新手,还是spring高手,这篇文章都会给大家带来知识上的收获,如果你已经十分熟悉本文内容就当做一次温故知新吧.spring.jar 是包含有完整发布的单个jar包,spring.jar中除了spring-mock.jar里所包含的内容外其他所有jar包的内容,因为只有在研发环境下才会用到spring-mock.jar来进行辅助测试,正式应用系统中是用不得这些类的. 除了spring.jar文件,Spring还包括有其他1

JMeter学习-023-JMeter 命令行(非GUI)模式详解(一)

前文 讲述了JMeter分布式运行脚本,以更好的达到预设的性能测试(并发)场景.同时,在前文的第一章节中也提到了 JMeter 命令行(非GUI)模式,那么此文就继续前文,针对 JMeter 的命令行模式进行详细解说. 一.应用场景 1.无需交互界面或受环境限制(linux text model) 2.远程或分布式执行 3.持续集成,通过shell脚本或批处理命令均可执行,生成的测试结果可被报表生成模块直接使用,便于生成报告 二.命令行模式优点 1.节约系统资源:无需启动界面,节约系统资源 2.

Tomcat详解及SNS系统的部署实现

前言:Tomcat是基于java研发的一个web容器,即web服务器,下面我们先简单介绍下Java 一 .Java 1.Java简介 Java是由Sun Micorsystems公司于1995年5月推出的Java面向对象程序设计语言(简称Java语言)和Java平台的总称.用Java实现的HotJava浏览器使得Java被广泛应用起来. 2.Java特点 Java语言是面向对象的语言,以数据为中心来组织程序的,包括数据+方法,方法存放于类中 自身具有API(应用程序编程接口)与ABI(应用程序二

JDK的命令详解操作

JDK的命令详解1 rmic 功能说明: rmic 为远程对象生成 stub 和 skeleton. 语法: rmic [ options ] package-qualified-class-name(s) 补充说明: rmic 编译器根据编译后的 Java 类(含有远程对象实现)名,为远程对象生成 stub 和 skeleton(远程对象是指实现 java.rmi.Remote 接口的对象).在 rmic 命令中所给的类必须是经 javac 命令成功编译且是完全包限定的类. 命令选项  -cl

Openfire Hazelcast集群详解

Openfire Hazelcast集群详解 作者:chszs,版权所有,未经同意,不得转载.博主主页:http://blog.csdn.net/chszs 一.概述 Openfire Hazelcast插件提供了在一个集群上运行多个冗余Openfire服务器的支持.通过把Openfire运行为一个集群,可以把终端的连接分配到多台Openfire服务器上,同时还提供了服务器的故障转移.Hazelcast个插件是Openfire原集群插件的替代,它使用了开源的Hazelcast数据分布框架来代替昂

Kafka详解之二、如何配置Kafka集群

Kafka集群配置比较简单,为了更好的让大家理解,在这里要分别介绍下面三种配置 单节点:一个broker的集群 单节点:多个broker的集群 多节点:多broker集群 一.单节点单broker实例的配置 1.首先启动zookeeper服务 Kafka本身提供了启动zookeeper的脚本(在kafka/bin/目录下)和zookeeper配置文件(在kafka/config/目录下),首先进入Kafka的主目录(可通过 whereis kafka命令查找到): [[email protect

SLF4J和Logback日志框架详解

SLF4J和Logback日志框架详解 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 本文讲述SLF4J和Logback日志框架.   SLF4J是一套简单的日志外观模式的Java API,帮助在项目部署时对接各种日志实现. LogBack在运行时使用JMX帮助修改日志配置,在生产状态下无需重启应用程序. SLF4J SLF4J是简单的日志外观模式框架,抽象了各种日志框架例如Logback.Log4j.Commons-logging和JDK自带的l

Java、javax、org、sun、Java.util等常用包的区别、详解、实例

Java.javax.org.sun包都是jdk提供的类包,且都是在rt.jar中.rt.jar是JAVA基础类库(java核心框架中很重要的包),包含lang在内的大部分功能,而且rt.jar默认就在根classloader的加载路径里面,所以放在classpath是多此一举 .他们之间的区别具体如下: 1. java.* JavaSE的标准库,是java标准的一部分,是对外承诺的java开发接口,通常要保持向后兼容,一般不会轻易修改.包括其他厂家(IBMJDK/HPJDK/OpenJDK)在