欢迎访问『www.cnblogs.com/blog-ice』
java.lang.management.*;
com.zaxxer.hikari.*;

@Scheduled(cron = "0/10 * * * * ?")
    public void performanceTest() throws Exception {
        ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
        MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
        MemoryUsage heapMemoryUsage = memoryMXBean.getHeapMemoryUsage();
        long used = heapMemoryUsage.getUsed();
        long max = heapMemoryUsage.getMax();
        long committed = heapMemoryUsage.getCommitted();
        double v = used * 1.0;
        MemoryUsage nonHeapMemoryUsage = memoryMXBean.getNonHeapMemoryUsage();
        long nonHeapUsed = nonHeapMemoryUsage.getUsed();
        long nonHeapMax = nonHeapMemoryUsage.getMax();
        long nonHeapCommitted = nonHeapMemoryUsage.getCommitted();
        String dataBasePool = "DataBasePool=[]";
        if (dataSource instanceof HikariDataSource) {
            HikariDataSource ds2 = (HikariDataSource)dataSource;
            HikariPoolMXBean hikariPoolMXBean = ds2.getHikariPoolMXBean();
            dataBasePool = String.format("DataBasePool=[ActiveConnections=%s, IdleConnections=%s, ThreadsAwaitingConnection=%s, TotalConnections=%s, " +
                            "MaximumPoolSize=%s, MinimumIdle=%s, IdleTimeout=%s, ConnectionTimeout=%s]",
                    hikariPoolMXBean.getActiveConnections(),
                    hikariPoolMXBean.getIdleConnections(),
                    hikariPoolMXBean.getThreadsAwaitingConnection(),
                    hikariPoolMXBean.getTotalConnections(),
                    ds2.getMaximumPoolSize(),
                    ds2.getMinimumIdle(),
                    ds2.getIdleTimeout(),
                    ds2.getConnectionTimeout());
        }
        log.info("ThreadCount={}, PeakThreadCount={}, TotalStartedThreadCount={}, DaemonThreadCount={}, " +
                        "HeapMemoryUsage%={}, HeapMemoryMaxUsage%={}, NonHeapMemoryUsage%={}, NonHeapMemoryMaxUsage%={}, " +
                        "{}," +
                        "HeapMemoryUsage=[{}], NonHeapMemoryUsage=[{}], ObjectPendingFinalizationCount={}",
                // Thread
                threadMXBean.getThreadCount(),
                threadMXBean.getPeakThreadCount(),
                threadMXBean.getTotalStartedThreadCount(),
                threadMXBean.getDaemonThreadCount(),
                // Memory
                String.format("%.2f%%", used * 1.0 / committed),
                String.format("%.2f%%", max * 1.0 / committed),
                String.format("%.2f%%", nonHeapUsed * 1.0 / nonHeapCommitted),
                String.format("%.2f%%", nonHeapMax * 1.0 / nonHeapCommitted),
                // DataBasePool
                dataBasePool,
                // Others
                heapMemoryUsage,
                nonHeapMemoryUsage,
                memoryMXBean.getObjectPendingFinalizationCount()
        );
    }

 

posted on 2022-01-12 16:17  仙路尽头谁为峰  阅读(944)  评论(2编辑  收藏  举报
这里是自由发挥的天堂