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() ); }
相互学习,共同进步!