`

JMX 简介

    博客分类:
  • j2ee
阅读更多

JMX【Java Management Extensions】 java管理扩展。简而言之,它提供一个统一的接口来管理一些系统资源。例如,你可能需要在某一时刻手动的删除服务器内存中的数据。那可行的解决方案就是提供一个页面,然后用户可在这个页面是做各种操作,然后发各种请求给服务器,然后服务器相应用户请求,做相应操作。而利用jmx就不需要自己去创建页面,只需将所要提供的服务注册到jmx,利用原生的jconsole就能控制系统资源。

 

一 注册MBean并通过JConsole查看MBean

1.HelloMBean.java

 

package mbean;
public interface HelloMBean {
	public void sayHello();
	public void setName(String name);
	public String getName();
}

 2.Hello.java

 

package mbean;
public class Hello implements HelloMBean {
	private String name;
	@Override
	public void sayHello() {
		System.out.println("say hello...");
	}
	@Override
	public void setName(String name) {
		this.name=name;
	}
	@Override
	public String getName() {
		return name;
	}
}

 3.Main.java[注册MBean]

 

package mbean;
import java.lang.management.ManagementFactory;
import javax.management.MBeanServer;
import javax.management.ObjectName;
public class Main {
	public static void main(String[] args) throws Exception{
		System.out.println(System.getProperties());
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); 
        ObjectName name = new ObjectName("com.example:type=Hello"); 
        Hello mbean = new Hello(); 
        mbs.registerMBean(mbean, name); 
       
        System.out.println("Waiting forever..."); 
        Thread.sleep(Long.MAX_VALUE); 
	}
}

 编写MBean接口时,命名必须以MBean结尾,并且相应的实现类【这里是Hello.java】必须和接口【这里是HelloMBean.java】在同一包下。

4. 通过JConsole查看注册的MBean。



 

 二 注册MXBean并通过JConsole查看

 

 1.QueueSample.java

package mxbean;
import java.util.Date;
public class QueueSample {
	private final Date date; 
    private final int size; 
    private final String head; 
    public QueueSample(Date date, int size, 
                        String head) { 
        this.date = date; 
        this.size = size; 
        this.head = head; 
    } 
         
    public Date getDate() { 
        return date; 
    } 
         
    public int getSize() { 
        return size; 
    } 
         
    public String getHead() { 
        return head; 
    } 
}

 2.QueueSamplerMXBean.java

package mxbean;
public interface QueueSamplerMXBean {
	public QueueSample getQueueSample(); 
    public void clearQueue(); 
}

 3.QueueSampler.java

package mxbean.impl;
import java.util.Date;
import java.util.Queue;
import mxbean.QueueSample;
import mxbean.QueueSamplerMXBean;
public class QueueSampler implements QueueSamplerMXBean {
	private Queue<String> queue;
	public QueueSampler(Queue<String> queue) {
		this.queue = queue;
	}
	public QueueSample getQueueSample() {
		synchronized (queue) {
			return new QueueSample(new Date(), queue.size(), queue.peek());
		}
	}
	public void clearQueue() {
		synchronized (queue) {
			queue.clear();
		}
	}
}

  编写MXBean接口时,没有像MBean那么多约束。接口命名可以以MXBean结尾也可以不用,只需要在接口上添加@MXBean注解来表明这个是一个MXBean。而且实现了可以与接口在不同包。最重要的是MXBean可以定义复杂的数据类型。

 4 .Main.java[注册MXBean]

package mxbean;
import java.lang.management.ManagementFactory;
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import mxbean.impl.QueueSampler;
public class Main {
	public static void main(String[] args) throws Exception {
		MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
		ObjectName mxbeanName = new ObjectName("com.example:type=QueueSampler");
		Queue<String> queue = new ArrayBlockingQueue<String>(10);
		queue.add("Request-1");
		queue.add("Request-2");
		queue.add("Request-3");
		QueueSampler mxbean = new QueueSampler(queue);
		mbs.registerMBean(mxbean, mxbeanName);
		System.out.println("Waiting...");
		Thread.sleep(Long.MAX_VALUE);
	}
}

 5. 通过JConsole查看



 

三 使用JMX Notification

1.AnimalMBean.java

 

package notification;
public interface AnimalMBean {
	public void eat();
	public void sleep();
}

 2.Animal.java

 

package notification;
import javax.management.AttributeChangeNotification;
import javax.management.MBeanNotificationInfo;
import javax.management.Notification;
import javax.management.NotificationBroadcasterSupport;
public class Animal extends  NotificationBroadcasterSupport implements AnimalMBean{
	int sequenceNumber=1;
	private String status="eat";
	@Override
	public void eat() {
		System.out.println("animal eats ...");
		
		Notification n = new AttributeChangeNotification(this,
                sequenceNumber++, System.currentTimeMillis(),
                "aniaml eats", "status", "String",
                status, "eat");

		sendNotification(n);
		status="eat";
	}

	@Override
	public void sleep() {
		System.out.println("animal sleeps...");
		Notification n = new AttributeChangeNotification(this,
                sequenceNumber++, System.currentTimeMillis(),
                "aniaml sleeps", "status", "String",
                status, "sleep");

		sendNotification(n);
		status="sleep";
	}
	
	@Override
    public MBeanNotificationInfo[] getNotificationInfo() {
        String[] types = new String[]{
            AttributeChangeNotification.ATTRIBUTE_CHANGE
        };

        String name = AttributeChangeNotification.class.getName();
        String description = "An attribute of this MBean has changed";
        MBeanNotificationInfo info = 
                new MBeanNotificationInfo(types, name, description);
        return new MBeanNotificationInfo[]{info};
    }
}

 

 3.Main.java

 

package notification;
import java.lang.management.ManagementFactory;
import javax.management.MBeanServer;
import javax.management.ObjectName;
public class Main {
	public static void main(String[] args) throws Exception{
		MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
		ObjectName mxbeanName = new ObjectName("com.example:type=Notification");
		Animal mxbean = new Animal();
		mbs.registerMBean(mxbean, mxbeanName);
		System.out.println("Waiting...");
		Thread.sleep(Long.MAX_VALUE);
	}
}

每当Animal类中eat或sleep方法是,都会向订阅者发送消息。

4. JConsole 演示



 点击Subscribe订阅



 

 点击sleep或eat任意按钮,触发相应操作



 在Notifications中会接收相应的消息

 

四 远程调用jmx。之前以上例子都是运行在本地的。只有本地的JConsole才能访问。

而要注册一个可供远程调用的MBean,必须暴露一个端口可供外部访问。

例如要将例1HelloMBean.java暴露出去

必须在启动参数中加入如下参数

-Dcom.sun.management.jmxremote.port=9999 // 外部访问端口

-Dcom.sun.management.jmxremote.authenticate=false // 关闭验证

-Dcom.sun.management.jmxremote.ssl=false // 关闭ssl

 

1. 通过JConsole访问



 

输入远程jmx服务器的ip地址以及jmx暴露的端口号

 

2. 通过代码远程调用

Main.java

package remote.access;
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 Main {
	public static void main(String[] args) throws Exception{
		JMXServiceURL url =  new JMXServiceURL("service:jmx:rmi:///jndi/rmi://127.0.0.7:9999/jmxrmi");
		JMXConnector jmxc = JMXConnectorFactory.connect(url);
		MBeanServerConnection mbsc=jmxc.getMBeanServerConnection();
		ObjectName name = new ObjectName("com.example:type=Hello"); 
		mbsc.invoke(name, "sayHello",null,null);
	}
}

 

  • 大小: 34 KB
  • 大小: 33.4 KB
  • 大小: 29.5 KB
  • 大小: 29 KB
  • 大小: 31.8 KB
  • 大小: 33.3 KB
分享到:
评论
1 楼 lijiejava 2013-07-10  
好!!!  

相关推荐

    JMX简介

    NULL 博文链接:https://hotboy10001000.iteye.com/blog/865118

    JMX一步一步来,快速学会开发JMX应用

    1. **JMX简介** JMX的主要作用是让开发者能够创建和注册可管理的对象,即MBeans,它们代表了应用程序中的各种资源或服务。MBeans提供了暴露其状态和操作的方法,使得管理者可以通过JMX API进行访问和控制。例如,...

    JMX学习,开发文档

    ### JMX 简介 JMX 不仅仅是一个接口,而是一套完整的规范,允许开发者将管理功能集成到Java应用中。通过MBeans,开发者可以创建可管理的对象,这些对象可以代表应用程序中的任何资源或服务,如配置参数、服务状态等...

    JMX HelloWorld Download

    1. **JMX简介**:JMX是Java平台的一部分,提供了一种标准的方式来管理和监控Java应用程序。它允许开发者创建可管理和可监控的组件,并将它们集成到应用程序中。 2. **MBean(Managed Beans)**:MBean是JMX的核心...

    Spring jmx

    #### JMX简介及其发展历程 JMX(Java Management Extensions)是一种用于管理与监控应用程序的标准框架和技术。它的前身是JMAPI(Java Management API),随着技术的发展,逐渐演变成了今天我们所熟知的JMX。JMX的...

    JMX-how-to-use.rar_jmx_服务器_远程监控 文件

    1. **JMX简介** JMX允许开发者创建和注册管理 Bean(MBeans),这些Bean提供了对应用程序组件的访问接口,从而可以监控和管理其状态。MBeans分为标准MBean、自定义MBean和动态MBean三种类型,它们分别对应不同的...

    tomcat_weblogic_jmx.txt

    #### 一、JMX 简介 Java Management Extensions (JMX) 是一个为应用程序、设备、系统等提供标准管理界面的框架。它允许开发者监控和管理资源(如应用程序、设备和服务),通过标准接口暴露资源的属性、操作和事件。...

    网络游戏-基于JMX的网络业务管理方法及其应用系统.zip

    一、JMX简介 Java Management Extensions (JMX) 是Java平台的一个标准组件,它提供了管理和监控应用程序、操作系统、硬件设备和网络服务的能力。通过JMX,开发者可以定义管理对象(MBeans),这些对象封装了应用程序...

    JMX1.4 规范 翻译 第一章(介绍)(至1.6节)

    JMX简介 JMX是Java平台上的一个标准,允许开发者创建可管理的组件,并通过统一的接口进行监控和控制。它使得系统管理员能够轻松地获取运行时信息,调整参数,甚至在必要时执行远程操作。JMX通过MBeans(Managed ...

    SpringJMX.pdf

    #### 二、JMX简介及其发展历程 **JMX**(Java Management Extensions) 是一种用于管理与监视应用程序的标准技术。它的前身是 **JMAPI**(Java Management API),后来演变为JMX并逐渐成为业界广泛接受的标准之一。 - *...

    jmxclient:命令行 jmx 客户端

    ### JMX简介 JMX是一种服务,它提供了一种灵活的方式来管理和监控Java应用程序,包括内存使用、线程状态、MBeans(Managed Beans)等。MBeans是JMX的核心概念,它们是Java对象,代表可管理的资源或服务,并提供了...

    jmxtools.jar

    一、JMX简介 JMX是Java平台上的一个标准API,它定义了如何在Java应用程序中创建、部署和管理组件的规范。这些组件可以是应用程序中的任何对象,如服务器、设备、服务等。通过JMX,开发者可以创建管理beans(MBeans)...

    Zabbix通过JMX方式监控java中间件

    #### 一、Zabbix与JMX监控简介 **Zabbix**是一款开源的企业级监控工具,它能够监控网络中的各种硬件资源和软件服务的状态,并且提供了丰富的功能,如自动发现、报警等。在Zabbix 2.0版本中引入了一个新的特性——...

    The JBoss 4 Application Server Guide

    - **JMX 简介**:这部分介绍了 JMX(Java Management Extensions)的概念,包括它的层次结构和组件。 - **Instrumentation Level**:指定了监控和管理资源的基本方法。 - **Agent Level**:涉及通过代理来管理资源...

    rehat linux 管方服务器配置教材

    - **JMX简介**:解释了Java Management Extensions (JMX) 的基本概念及其在JBoss中的作用。 - **仪表化级别**:探讨了在不同层级上如何实现监控和管理。 - **代理级别**:介绍了如何利用代理来扩展管理功能。 - ...

    LR上配置监控WEBLOGIC

    2. **JMX简介**:JMX是一种Java技术,用于管理与监控应用中的资源。它提供了一种标准化的方式来访问系统和应用程序的信息,并允许进行远程管理和监控。对于WebLogic而言,JMX可以通过MBeans(Managed Beans)来访问...

Global site tag (gtag.js) - Google Analytics