zoukankan      html  css  js  c++  java
  • JMX浅谈

    一 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;
        }
        
    }
     
  • 相关阅读:
    (转)视频编码标准汇总及比较
    (转)live555从RTSP服务器读取数据到使用接收到的数据流程分析
    (转)MPEG4码流简单分析
    H264裸流分析中,能获取哪些信息?
    (转)基于live555的流媒体代理转发服务器
    测试x264编码器的低延时编码和非延时编码
    ELK 日志分析系统
    Dubbox:来自当当网的SOA服务框架
    CHMOD命令怎么用?
    linux显示文件列表命令ls,使用ls --help列出所有命令参数
  • 原文地址:https://www.cnblogs.com/zabulon/p/5813235.html
Copyright © 2011-2022 走看看