JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
实际上来说我们可以用jmx来监控一些java应用的运行情况,还有自己写的一些服务类的应用。
下面链接有详细说明
https://stevenengelhardt.com/2013/11/25/instrumenting-a-java-web-application-with-jmx/
为什么使用JMX工具应用程序?
高质量监测远远超过操作系统指标,如CPU、内存和磁盘空间。每个非平凡的应用程序有一个关键的指标集合生产了解应用程序的行为。没有任何现成的工具来收集这些指标,因为它们是内部应用程序。这些指标都是一些例子:
- 列表内容
- 为一个内部缓存命中率和未命中率,内存缓存
- 当前登录用户的数量
- 身份验证成功和失败
JMX是一个复杂的技术涵盖远不止应用仪表。不过,本教程的重点是应用程序开发人员需要知道的基础知识来实现仪器应用程序。如果你想了解更多,请阅读Java JMX教程应用程序,开发人员必须做到以下几点:
写一个或多个托管bean,或者mbean,Java对象包含应用程序公开的度量标准
注册的MBean平台MBean服务器
通过编写一个Java接口标准MBean定义名字结束withMBean和Java类实现该接口。
例如:
CounterMBean .java
/**
* 类描述:Jmx注册对象所需要实现的接口
*
* 接口名称必须以MBean结尾否则会抛出下面异常
*
* MBean class com.test.all.Test$Counter does not implement DynamicMBean,
* and neither follows the Standard MBean conventions
*
* @Description:
* @author Levin
* @since JDK 1.7
* @date 2016年5月26日 上午11:22:13
*/
public interface CounterMBean {
/*
* 以get或者set为前缀命名的带有返回值的方法,在Jmx中会以属性方式显示
*/
public int getCounter();
/*
* 没有返回值的方法,在Jmx中会以操作方式显示
*/
public void plusCounter();
public void lessCounter();
public void stop();
public void start();
}
Counter.java
/**
* 类描述:Jmx中注册的对象,需要实现以MBean命名结尾的接口
*
* @Description: TODO
* @author Levin
* @since JDK 1.7
* @date 2016年5月26日 上午11:25:50
*/
public static class Counter implements CounterMBean {
// 原子性计数器
public AtomicInteger atmoicCount = new AtomicInteger();
@Override
public int getCounter() {
return atmoicCount.get();
}
@Override
public void plusCounter() {
atmoicCount.incrementAndGet();
}
@Override
public void lessCounter() {
atmoicCount.decrementAndGet();
}
@Override
public void stop() {
// TODO Auto-generated method stub
}
@Override
public void start() {
// TODO Auto-generated method stub
}
/*
* 只有在接口中定义的方法才会被Jmx解释
*/
public void status() {
}
}
public static void main(String[] args) throws MalformedObjectNameException, InstanceAlreadyExistsException,
MBeanRegistrationException, NotCompliantMBeanException {
// MBeanServer对象是在代理端进行 MBean 操作的接口。它包含创建、注册和删除
// MBean所需的方法,以及用于已注册MBean的存取方法。
// 用户代码通常不实现此接口。相反,应该使用 MBeanServerFactory 类中的某个方法获得实现此接口的对象。
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
//表示 MBean 的对象名,或者能够与多个 MBean 名称相匹配的模式。此类的实例是不可变的。
ObjectName name = new ObjectName("levin.lang:type=org.test.management,name=levin");
Counter userMBean = new Counter();
//注册对象到JMx中
mBeanServer.registerMBean(userMBean, name);
while (true) {
}
}
mbean还可能生成通知信号状态变化,检测到的事件或问题。这可以用来从一个轮询基于推更新机制。这样做是通过MBean类继承fromNotificationBroadcasterSupport和notify()。
可以使用Jconsole监控JMX,如何使用Jconsole监控JMX请参考