• 通过JMX获取JVM信息


    package com.googosoft.gateway_zuul;
    
    import java.lang.management.ClassLoadingMXBean;
    import java.lang.management.CompilationMXBean;
    import java.lang.management.GarbageCollectorMXBean;
    import java.lang.management.ManagementFactory;
    import java.lang.management.MemoryMXBean;
    import java.lang.management.MemoryManagerMXBean;
    import java.lang.management.MemoryPoolMXBean;
    import java.lang.management.MemoryUsage;
    import java.lang.management.OperatingSystemMXBean;
    import java.lang.management.RuntimeMXBean;
    import java.lang.management.ThreadMXBean;
    import java.util.List;
    
    import javax.management.MBeanServerConnection;
    
    public class MBeanDemo {
    
        public static void main(String[] args) {
            showJvmInfo();
            showMemoryInfo();
            showSystem();
            showClassLoading();
            showCompilation();
            showThread();
            showGarbageCollector();
            showMemoryManager();
            showMemoryPool();
        }
    
        /**
         * Java 虚拟机的运行时系统
         */
        public static void showJvmInfo() {
            RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();
            String vendor = mxbean.getVmVendor();
            System.out.println("jvm name:" + mxbean.getVmName());
            System.out.println("jvm version:" + mxbean.getVmVersion());
            System.out.println("jvm bootClassPath:" + mxbean.getBootClassPath());
            System.out.println("jvm start time:" + mxbean.getStartTime());
        }
    
        /**
         * Java 虚拟机的内存系统
         */
        public static void showMemoryInfo() {
            MemoryMXBean mem = ManagementFactory.getMemoryMXBean();
            MemoryUsage heap = mem.getHeapMemoryUsage();
            System.out.println("Heap committed:" + heap.getCommitted() + " init:" + heap.getInit() + " max:"
                               + heap.getMax() + " used:" + heap.getUsed());
        }
    
        /**
         * Java 虚拟机在其上运行的操作系统
         */
        public static void showSystem() {
            OperatingSystemMXBean op = ManagementFactory.getOperatingSystemMXBean();
            System.out.println("Architecture: " + op.getArch());
            System.out.println("Processors: " + op.getAvailableProcessors());
            System.out.println("System name: " + op.getName());
            System.out.println("System version: " + op.getVersion());
            System.out.println("Last minute load: " + op.getSystemLoadAverage());
        }
        
        /**
         * Java 虚拟机的类加载系统
         */
        public static void showClassLoading(){
            ClassLoadingMXBean cl = ManagementFactory.getClassLoadingMXBean();
            System.out.println("TotalLoadedClassCount: " + cl.getTotalLoadedClassCount());
            System.out.println("LoadedClassCount" + cl.getLoadedClassCount());
            System.out.println("UnloadedClassCount:" + cl.getUnloadedClassCount());
        }
        
        /**
         * Java 虚拟机的编译系统
         */
        public static void showCompilation(){
            CompilationMXBean com = ManagementFactory.getCompilationMXBean();
            System.out.println("TotalCompilationTime:" + com.getTotalCompilationTime());
            System.out.println("name:" + com.getName());
        }
        
        /**
         * Java 虚拟机的线程系统
         */
        public static void showThread(){
            ThreadMXBean thread = ManagementFactory.getThreadMXBean();
            System.out.println("ThreadCount" + thread.getThreadCount());
            System.out.println("AllThreadIds:" + thread.getAllThreadIds());
            System.out.println("CurrentThreadUserTime" + thread.getCurrentThreadUserTime());
            //......还有其他很多信息
        }
        
        /**
         * Java 虚拟机中的垃圾回收器。
         */
        public static void showGarbageCollector(){
            List<GarbageCollectorMXBean> gc = ManagementFactory.getGarbageCollectorMXBeans();
            System.out.println("*************");
            for(GarbageCollectorMXBean GarbageCollectorMXBean : gc){
                System.out.println("name:" + GarbageCollectorMXBean.getName()); 
                System.out.println("CollectionCount:" + GarbageCollectorMXBean.getCollectionCount());
                System.out.println("CollectionTime" + GarbageCollectorMXBean.getCollectionTime());  
            }
            System.out.println("*************");
        }
        
        /**
         * Java 虚拟机中的内存管理器
         */
        public static void showMemoryManager(){
            List<MemoryManagerMXBean> mm = ManagementFactory.getMemoryManagerMXBeans();
            for(MemoryManagerMXBean eachmm: mm){
                System.out.println("name:" + eachmm.getName());
                System.out.println("MemoryPoolNames:" + eachmm.getMemoryPoolNames().toString());
            }
        }
        
        /**
         * Java 虚拟机中的内存池
         */
        public static void showMemoryPool(){
            List<MemoryPoolMXBean> mps = ManagementFactory.getMemoryPoolMXBeans();
            for(MemoryPoolMXBean mp : mps){
                System.out.println("name:" + mp.getName());
                System.out.println("CollectionUsage:" + mp.getCollectionUsage());
                System.out.println("type:" + mp.getType());
            }
        }
        
        /**
         * 访问 MXBean 的方法的三种方法
         */
        public static void visitMBean(){
            
            //第一种直接调用同一 Java 虚拟机内的 MXBean 中的方法。
            RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();
            String vendor1 = mxbean.getVmVendor();
            System.out.println("vendor1:" + vendor1);
            
            //第二种通过一个连接到正在运行的虚拟机的平台 MBeanServer 的 MBeanServerConnection。
            MBeanServerConnection mbs = null;
            // Connect to a running JVM (or itself) and get MBeanServerConnection
            // that has the JVM MXBeans registered in it
    
            /*
            try {
                // Assuming the RuntimeMXBean has been registered in mbs
                ObjectName oname = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME);
                String vendor2 = (String) mbs.getAttribute(oname, "VmVendor");
                System.out.println("vendor2:" + vendor2);
            } catch (Exception e) {
                e.printStackTrace();
            }
            */
            
            //第三种使用 MXBean 代理
    //        MBeanServerConnection mbs3 = null;
    //        RuntimeMXBean proxy;
    //        try {
    //            proxy = ManagementFactory.newPlatformMXBeanProxy(mbs3,ManagementFactory.RUNTIME_MXBEAN_NAME,
    //                                                     RuntimeMXBean.class);
    //            String vendor = proxy.getVmVendor();
    //        } catch (IOException e) {
    //            e.printStackTrace();
    //        }
    
        }
    
    }
  • 相关阅读:
    《1024伐木累》-te别篇,庭审你知道吗?
    《1024伐木累》-人生最高境界,长的好看
    《1024伐木累》-买车,见梦中之人
    《1024伐木累》-小白篇之谈判-总章节七
    《1024伐木累》-新年到了,祝大家新年快乐!
    《1024伐木累》-年会了,剪刀石头布决胜
    《1024伐木累》-小白篇之丽jie(结束篇)-总章节六
    《1024伐木累》-老板,我又说实话了
    《1024伐木累》-BUG的通用解决办法
    [复习资料][随想]如何枚举一个排列
  • 原文地址:https://www.cnblogs.com/excellencesy/p/12373727.html
Copyright © 2020-2023  润新知