一 JMX 是什么?

JMX(Java Management Extensions,即Java管理扩展)

JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等
优点可以非常容易的使应用程序具有被管理
伸缩性的架构每个JMX Agent服务可以很容易的放入到Agent中,每个JMX的实现都提供几个核心的Agent服务,你也可以自己编写服务,服务可以很容易的部署,取消部署。

主要提供接口,允许有不同的实现
二 JMX 实例分析
分为服务器端和客户端
服务器端
Monitor.java

public class Monitor {
public Monitor(){ }
public static void main(String[] args) {
start();
} public static void start() {
new Thread(new Runnable() {
public void run() { Thread.currentThread().setContextClassLoader(Monitor.class.getClassLoader()); MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ObjectName memory;
try { memory = new ObjectName(Constants.MEMORY_MANAGE_BEAN);
//注册待监控Object class
server.registerMBean(new MemoryManager(), memory);
//监控端口
int serverPort = Constants.MONITOR_SERVANT_PORT; LocateRegistry.createRegistry(serverPort); JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:" + serverPort + "/jmxrmi");
JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, server);
cs.start(); System.out.println("----jmx server start ----- ");
} catch (Exception e) {
System.out.println("----Fail to start server----");
e.printStackTrace();
}
}
}).start();
}
}

被调用类

接口MemoryManagerMXBean.java

public interface MemoryManagerMXBean {
public void stop(); public long getTotalPhysicalMemorySize(int mask); public static class MemoryStateMask{
public static final int OVERALL_MEMORY_USE = 1;
public static final int TYPE_ALLTIME_MEMORY_USE = 2; /
} public String getMemoryState(int memoryStateMask);
}

MemoryManager.java

public class MemoryManager implements MemoryManagerMXBean{
public MemoryManager(){
}
@Override
public String getMemoryState(int mask) {
String result = "";
switch(mask){
case MemoryStateMask.OVERALL_MEMORY_USE:
result = getOverallMemoryState();
break;
case MemoryStateMask.TYPE_ALLTIME_MEMORY_USE:
result = MonitorRuntime.getTypeMemoryUse(MonitorRuntime.TYPE_MEMORY_USE_OPTION.ALLTIME_USE);
break;
} return result;
}
private long getUsedMemory(){
Runtime rt = Runtime.getRuntime();
long usedMem = rt.totalMemory() - rt.freeMemory();
return usedMem;
}
}

客户端调用:
JmxWebContainerConnector.java

public class JmxWebContainerConnector {
private MBeanServerConnection mbsc;
private ObjectName mbeanName;
public JmxWebContainerConnector() throws Exception {
try {
int serverPort = Constants.MONITOR_SERVANT_PORT;
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:" + serverPort + "/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
this.mbsc = jmxc.getMBeanServerConnection();
this.mbeanName = new ObjectName(Constants.MEMORY_MANAGE_BEAN);
} catch (Exception e) {
System.err.println("。。。。连接服务器失败。。。。");
throw new Exception(e);
}
}public MemoryState getMemoryState() throws Exception {
int overallMemoryUseMask = 1;
String json = (String) mbsc.invoke(mbeanName, "getMemoryState", new Object[] { overallMemoryUseMask }, new String[] { "int" });
MemoryState state = MemoryState.fromJmxJSON(json);
return state;
} }
 

JMX浅谈的更多相关文章

  1. 浅谈springboot自动配置原理

    前言 springboot自动配置关键在于@SpringBootApplication注解,启动类之所以作为项目启动的入口,也是因为该注解,下面浅谈下这个注解的作用和实现原理 @SpringBootA ...

  2. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  3. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  4. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  5. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  6. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

  7. 浅谈angular2+ionic2

    浅谈angular2+ionic2   前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2 ...

  8. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  9. Linux特殊符号浅谈

    Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...

随机推荐

  1. C 碎片十 关键字&库函数

    一.关键字 1, sizeof sizeof关键字用于计算所占空间大小的 格式:sizeof(类型名/变量名); 2, typedef typedef关键字用于重命名数据类型的,相当于给原来的数据类型 ...

  2. ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第九天(非原创)

    文章大纲 一.课程介绍二.今日功能介绍三.项目源码与资料下载四.参考文章 一.课程介绍 一共14天课程(1)第一天:电商行业的背景.淘淘商城的介绍.搭建项目工程.Svn的使用.(2)第二天:框架的整合 ...

  3. sublime 常用快捷键(转)

    Sublime text 3是码农最喜欢的代码编辑器,每天和代码打交道,必先利其器,掌握基本的代码编辑器的快捷键,能让你打码更有效率.刚开始可能有些生疏,只要花一两个星期坚持使用并熟悉这些常用的快捷键 ...

  4. python之re模块和正则表达式

    今天我们来谈谈python中模块的使用,在探讨模块前先来了解一下正则表达式的具体用法. 1.正则表达式 正则表达式就是匹配 字符串内容的一种规则.谈到正则就和字符串相关了,首先我们要知道什么是字符组. ...

  5. css清除浮动好方法

    1.clear:both ==>IE6,7会有高度,所以去高度需要.clear{ clear:both; height:0px; margin:0; padding:0; width:0; bo ...

  6. spring mvc <mvc;resources>

    spring mvc 的<mvc;resources mapping="***" location="***">标签是在spring3.0.4出现的 ...

  7. ansible基本操作

    ansible优点:redhat自带工具,可通过rpm或yum直接安装:客户端免安装:操作通过ssh验证操作:可以通过自定义hosts文件对可操作主机进行分类,方便批量操作 #ansible操作格式, ...

  8. linux 下 `dirname $0`(转)

    在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的.因为他返回当前路径的".".这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个目 ...

  9. Visual Studio 更改护眼颜色

  10. C++中的异常安全性

    http://blog.csdn.net/bonchoix/article/details/8046727 一个函数如果说是“异常安全”的,必须同时满足以下两个条件:1.不泄漏任何资源:2.不允许破坏 ...