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