JMX浅谈
一 JMX 是什么?
JMX(Java Management Extensions,即Java管理扩展)
主要提供接口,允许有不同的实现
二 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浅谈的更多相关文章
- 浅谈springboot自动配置原理
前言 springboot自动配置关键在于@SpringBootApplication注解,启动类之所以作为项目启动的入口,也是因为该注解,下面浅谈下这个注解的作用和实现原理 @SpringBootA ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
- 浅谈angular2+ionic2
浅谈angular2+ionic2 前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别. 1. 项目所用:angular2+ionic2 ...
- iOS开发之浅谈MVVM的架构设计与团队协作
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- Linux特殊符号浅谈
Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...
随机推荐
- C#简单代码转移数据库数据
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data;u ...
- Duplicate Emails
Write a SQL query to find all duplicate emails in a table named Person. +----+---------+ | Id | Emai ...
- 构建第一个Spring Boot2.0应用之Controller(三)
Controller控制器主要是接收浏览器请求.下面说一说@Controller注解和@RestController的区别: (1)@Controller类中的方法可以直接通过返回String跳转到j ...
- font:inherit
font:inherit 字体的设置 设置所有元素的字体保持一致: 所有元素:*{font:inherit;} /* IE8+ */ body体用percent:body{font:100%/1 sa ...
- DB2数据库备份还原
恢复及备份NC DB2数据库步 一. 安装DB2数据库 解压db2v9.5ins.rar安装,在写此文档时客户一般用的是9.5: 注意不要将db2安装到系统盘: 二. Windows版本 1.数据库备 ...
- 解决Android Studio和Android SDK Manager无法在线更新的问题[转]
升级时提示 Connection failed. Please check your network connection and try again 修改安装目录下bin\studio.exe.vm ...
- c++ STL map容器成员函数
map容器用于查找,设置键值和元素值,输入键值,就能得到元素值.map对象中的元素时刻都是有序的,除非无序插入的.它是用平衡树创建的.查找很快. 函数 描述,注意有r的地方都是不能用it代替的. ma ...
- java Vamei快速教程20 GUI
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! GUI(Graphical User Interface)提供了图形化的界面,允许 ...
- [转载]正则表达式参考文档 - Regular Expression Syntax Reference.
正则表达式参考文档 - Regular Expression Syntax Reference. [原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/regref. ...
- POJ - 3111 K Best(二分)
包含一些ai和bi的集用S来表示,x = max(sigma(ai)/sigma(bi),i 属于S) ,k 表示S的大小,k= |S|. x和k之间具有单调性.k0 < k1 → x0 ≥ x ...