zoukankan      html  css  js  c++  java
  • JAVA代码中获取JVM信息

    一、JAVA中获取JVM的信息

      原理,利用JavaSDK自带的ManagementFactory类来获取。

    二、获取信息

    1、获取进程ID

        @Test
        public void test1() {
            RuntimeMXBean mxb = ManagementFactory.getRuntimeMXBean();
            System.out.println(mxb.getName()); //2668@Sindrol-PC
        }

    2、获取ManagementFactory.getRuntimeMXBean()的其它信息

    RuntimeMXBean mxb = ManagementFactory.getRuntimeMXBean();
    mxb.getSystemProperties() = {HashMap@866} size = 56 mxb.getInputArguments() = {Collections$UnmodifiableRandomAccessList@1039} size = 5 mxb.getBootClassPath() = "C:Program FilesJavajdk1.8.0_161jrelib esources.jar;C:Program FilesJavajdk1.8.0_161jrelib t.jar;C:Program FilesJavajdk1.8.0_161jrelibsunrsasign.jar;C:Program FilesJavajdk1.8.0_161jrelibjsse.jar;C:Program FilesJavajdk1.8.0_161jrelibjce.jar;C:Program FilesJavajdk1.8.0_161jrelibcharsets.jar;C:Program FilesJavajdk1.8.0_161jrelibjfr.jar;C:Program FilesJavajdk1.8.0_161jreclasses;D:ApplicatonDevToolsJetBrainsIntelliJIDEAlib tdebugger-agent-storage.jar" mxb.getLibraryPath() = "C:Program FilesJavajdk1.8.0_161in;C:windowsSunJavain;C:windowssystem32;C:windows;C:Program FilesDockerDockerResourcesin;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv8.0in;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv8.0libnvvp;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv8.0libx64;D:ApplicatonDevToolsPython3.5Scripts;D:ApplicatonDevToolsPython3.5;D:ApplicatonDevToolscudnn-8.0-windows10-x64-v5.1cuda;D:ApplicatonDevToolscudnn-8.0-windows10-x64-v5.1cudain;D:ApplicatonDevToolscudnn-8.0-windows10-x64-v5.1cudalibx64;D:ApplicatonDevToolscudnn-8.0-windows10-x64-v5.1cudalib;C:Program Files (x86)Common FilesNetSarang;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:Program FilesMicrosoft SQL Server120ToolsBinn;C:Program FilesMicrosoft SQL Server130ToolsBinn;C:Program FilesMicrosoftWeb Platform Installer;C:Program Files (x86)Microsoft SDKsAzureCL" mxb.getClassPath() = "D:ApplicatonDevToolsJetBrainsIntelliJIDEAlibidea_rt.jar;D:ApplicatonDevToolsJetBrainsIntelliJIDEApluginsjunitlibjunit-rt.jar;D:ApplicatonDevToolsJetBrainsIntelliJIDEApluginsjunitlibjunit5-rt.jar;C:Program FilesJavajdk1.8.0_161jrelibcharsets.jar;C:Program FilesJavajdk1.8.0_161jrelibdeploy.jar;C:Program FilesJavajdk1.8.0_161jrelibextaccess-bridge-64.jar;C:Program FilesJavajdk1.8.0_161jrelibextcldrdata.jar;C:Program FilesJavajdk1.8.0_161jrelibextdnsns.jar;C:Program FilesJavajdk1.8.0_161jrelibextjaccess.jar;C:Program FilesJavajdk1.8.0_161jrelibextjfxrt.jar;C:Program FilesJavajdk1.8.0_161jrelibextlocaledata.jar;C:Program FilesJavajdk1.8.0_161jrelibext ashorn.jar;C:Program FilesJavajdk1.8.0_161jrelibextsunec.jar;C:Program FilesJavajdk1.8.0_161jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.8.0_161jrelibextsunmscapi.jar;C:Program FilesJavajdk1.8.0_161jrelibextsunpkcs11.jar;C:Pr" mxb.getManagementSpecVersion() = "1.2" mxb.getSpecName() = "Java Virtual Machine Specification" mxb.getSpecVendor() = "Oracle Corporation" mxb.getStartTime() = 1527587462275 mxb.getUptime() = 95372 mxb.getVmVendor() = "Oracle Corporation" mxb.getObjectName() = {ObjectName@1052} "java.lang:type=Runtime" mxb.getName() = "2668@Sindrol-NTB"

     3、获取操作系统信息

        @Test
        public void test2() {
            OperatingSystemMXBean osb = ManagementFactory.getOperatingSystemMXBean();
            System.out.println(osb.getName()); //Windows 10
            System.out.println(osb.getArch()); //amd 64
            System.out.println(osb.getAvailableProcessors()); //4
            System.out.println(osb.getVersion()); //10.0
            System.out.println(osb.getSystemLoadAverage()); //-1.0
    
        }

    4、获取JVM的内存

        @Test
        public void test4() {
            MemoryMXBean mxb = ManagementFactory.getMemoryMXBean();
            //Heap
            System.out.println("Max:" + mxb.getHeapMemoryUsage().getMax() / 1024 / 1024 + "MB");    //Max:1776MB
            System.out.println("Init:" + mxb.getHeapMemoryUsage().getInit() / 1024 / 1024 + "MB");  //Init:126MB
            System.out.println("Committed:" + mxb.getHeapMemoryUsage().getCommitted() / 1024 / 1024 + "MB");   //Committed:121MB
            System.out.println("Used:" + mxb.getHeapMemoryUsage().getUsed() / 1024 / 1024 + "MB");  //Used:7MB
            System.out.println(mxb.getHeapMemoryUsage().toString());    //init = 132120576(129024K) used = 8076528(7887K) committed = 126877696(123904K) max = 1862270976(1818624K)
    
            //Non heap
            System.out.println("Max:" + mxb.getNonHeapMemoryUsage().getMax() / 1024 / 1024 + "MB");    //Max:0MB
            System.out.println("Init:" + mxb.getNonHeapMemoryUsage().getInit() / 1024 / 1024 + "MB");  //Init:2MB
            System.out.println("Committed:" + mxb.getNonHeapMemoryUsage().getCommitted() / 1024 / 1024 + "MB");   //Committed:8MB
            System.out.println("Used:" + mxb.getNonHeapMemoryUsage().getUsed() / 1024 / 1024 + "MB");  //Used:7MB
            System.out.println(mxb.getNonHeapMemoryUsage().toString());    //init = 2555904(2496K) used = 7802056(7619K) committed = 9109504(8896K) max = -1(-1K)
        }

    5、获取JVM的内存池情况

        @Test
        public void test5() {
            List<MemoryPoolMXBean> mxb = ManagementFactory.getMemoryPoolMXBeans();
            for (MemoryPoolMXBean memoryPoolMXBean : mxb) {
                System.out.println("Name:" + memoryPoolMXBean.getName());
                System.out.println("Usage:" + memoryPoolMXBean.getUsage());
                System.out.println("Manager:" + String.join(",", memoryPoolMXBean.getMemoryManagerNames()));
                System.out.println("Type:" + memoryPoolMXBean.getType());
                System.out.println("--------------------------");
            }
    
        }

    结果:

    Name:Code Cache
    Usage:init = 2555904(2496K) used = 1742656(1701K) committed = 2555904(2496K) max = 251658240(245760K)
    Manager:CodeCacheManager
    Type:Non-heap memory
    --------------------------
    Name:Metaspace
    Usage:init = 0(0K) used = 5436960(5309K) committed = 5767168(5632K) max = -1(-1K)
    Manager:Metaspace Manager
    Type:Non-heap memory
    --------------------------
    Name:Compressed Class Space
    Usage:init = 0(0K) used = 632000(617K) committed = 786432(768K) max = 1073741824(1048576K)
    Manager:Metaspace Manager
    Type:Non-heap memory
    --------------------------
    Name:PS Eden Space
    Usage:init = 33554432(32768K) used = 8076056(7886K) committed = 33554432(32768K) max = 687865856(671744K)
    Manager:PS MarkSweep,PS Scavenge
    Type:Heap memory
    --------------------------
    Name:PS Survivor Space
    Usage:init = 5242880(5120K) used = 0(0K) committed = 5242880(5120K) max = 5242880(5120K)
    Manager:PS MarkSweep,PS Scavenge
    Type:Heap memory
    --------------------------
    Name:PS Old Gen
    Usage:init = 88080384(86016K) used = 0(0K) committed = 88080384(86016K) max = 1396703232(1363968K)
    Manager:PS MarkSweep
    Type:Heap memory
    --------------------------

    6、获取程序线程信息

        @Test
        public void test6() {
            ThreadMXBean tmx = ManagementFactory.getThreadMXBean();
            System.out.println("thread count:" + tmx.getThreadCount());
            for (long id : tmx.getAllThreadIds()) {
                ThreadInfo ti = tmx.getThreadInfo(id);
                System.out.println(ti.toString().trim());
                System.out.println("cpu time:" + tmx.getThreadCpuTime(id));
                System.out.println("user time:" + tmx.getThreadUserTime(id));
                System.out.println("-----------------");
            }
            System.out.println("findDeadlockedThreads:");
            if (tmx.findDeadlockedThreads() != null)
                for (long id : tmx.findDeadlockedThreads()) {
                    ThreadInfo ti = tmx.getThreadInfo(id);
                    System.out.println(ti.toString().trim());
                }
        }

    结果:

    thread count:6
    "Monitor Ctrl-Break" Id=6 RUNNABLE (in native)
    cpu time:0
    user time:0
    -----------------
    "Attach Listener" Id=5 RUNNABLE
    cpu time:0
    user time:0
    -----------------
    "Signal Dispatcher" Id=4 RUNNABLE
    cpu time:0
    user time:0
    -----------------
    "Finalizer" Id=3 WAITING on java.lang.ref.ReferenceQueue$Lock@22927a81
    cpu time:0
    user time:0
    -----------------
    "Reference Handler" Id=2 WAITING on java.lang.ref.Reference$Lock@78e03bb5
    cpu time:0
    user time:0
    -----------------
    "main" Id=1 RUNNABLE
    cpu time:203125000
    user time:171875000
    -----------------
    findDeadlockedThreads:
  • 相关阅读:
    第一阶段冲刺——4
    Day 1 测试流程--H模型
    【疑问】待解决
    Zookeeper 入门(一)
    【基础组件1】Flume入门(一)
    埋点测试、埋点接口测试
    单点登录 VS 多点登录
    web系统原理
    测试用例总结篇(一)
    功能测试心得(二)
  • 原文地址:https://www.cnblogs.com/songxingzhu/p/9106394.html
Copyright © 2011-2022 走看看