美文网首页
java程序打印自身性能诊断统信息 堆栈 对象数量 死锁

java程序打印自身性能诊断统信息 堆栈 对象数量 死锁

作者: ShootHzj | 来源:发表于2021-08-25 22:45 被阅读0次

    打印CPU使用

    private static void printCpuUsage() {
            final com.sun.management.OperatingSystemMXBean platformMXBean = ManagementFactory.getPlatformMXBean(com.sun.management.OperatingSystemMXBean.class);
            double cpuLoad = platformMXBean.getProcessCpuLoad();
            System.out.println(cpuLoad);
        }
    

    打印线程堆栈

    private static void printThreadDump() {
            final StringBuilder dump = new StringBuilder();
            final ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
            // 100代表线程堆栈的层级
            final ThreadInfo[] threadInfos = threadMXBean.getThreadInfo(threadMXBean.getAllThreadIds(), 100);
            for (ThreadInfo threadInfo : threadInfos) {
                dump.append('"');
                dump.append(threadInfo.getThreadName());
                dump.append("\" ");
                final Thread.State state = threadInfo.getThreadState();
                dump.append("\n   java.lang.Thread.State: ");
                dump.append(state);
                final StackTraceElement[] stackTraceElements = threadInfo.getStackTrace();
                for (final StackTraceElement stackTraceElement : stackTraceElements) {
                    dump.append("\n        at ");
                    dump.append(stackTraceElement);
                }
                dump.append("\n\n");
            }
            System.out.println(dump);
        }
    

    打印内存统计信息

    引入依赖

     <dependency>
                <groupId>com.jerolba</groupId>
                <artifactId>jmnemohistosyne</artifactId>
                <version>0.2.3</version>
            </dependency>
    
     private static void printClassHisto() {
            Histogramer histogramer = new Histogramer();
            MemoryHistogram histogram = histogramer.createHistogram();
    
            HistogramEntry arrayList = histogram.get("java.util.ArrayList");
            System.out.println(arrayList.getInstances());
            System.out.println(arrayList.getSize());
    
            for (HistogramEntry entry : histogram) {
                System.out.println(entry);
            }
        }
    

    打印死锁

    javadoc中指出,这是一个开销较大的操作

     private static void printDeadLock() {
            final ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
            final long[] deadlockedThreads = threadMXBean.findDeadlockedThreads();
            for (long deadlockedThread : deadlockedThreads) {
                final ThreadInfo threadInfo = threadMXBean.getThreadInfo(deadlockedThread);
                System.out.println(threadInfo + "deadLocked");
            }
        }
    

    相关文章

      网友评论

          本文标题:java程序打印自身性能诊断统信息 堆栈 对象数量 死锁

          本文链接:https://www.haomeiwen.com/subject/yxdpiltx.html