• 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;
        }
        
    }
     
  • 相关阅读:
    sp_executesql介绍和使用
    jQuery中的 return false, e.preventDefault(), e.stopPropagation()的区别
    clearfix:after 清除css浮动
    paip.mysql 性能跟iops的以及硬盘缓存的关系
    paip.mysql 性能测试 报告 home right
    paip.mysql 性能测试by mysqlslap
    paip.java 架构师之路以及java高级技术
    paip. 提升性能---hibernate的缓存使用 总结
    paip. 解决php 以及 python 连接access无效的参数量。参数不足,期待是 1”的错误
    paip.解决access出现 -2147467259 无效的参数量
  • 原文地址:https://www.cnblogs.com/zabulon/p/5813235.html
Copyright © 2020-2023  润新知