Spring Boot 监控 线程 数据库连接池


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()
        );
    }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM