200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Hikari 数据库连接池监控

Hikari 数据库连接池监控

时间:2019-05-27 20:54:41

相关推荐

Hikari 数据库连接池监控

监控空闲连接数 ,活动连接,总连接数,等待连接的线程数是非常短暂的。由于每个统计数据都是时间敏感的,并且是独立收集的,所以在短时间内可能无法“累计”。不要基于这些值进行任何编程决策,它们仅用于监视。‍

@Slf4jpublic class DataSourceMonitor {private HikariPoolMXBean proxy;private boolean hasStarted;@Resourceprivate HikariDataSource hikariDataSource;@Scheduled(cron = "0/1 * * * * *")public void monitor() {try {if (null == proxy) {MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();ObjectName poolName = new ObjectName("com.zaxxer.hikari:type=Pool (" + hikariDataSource.getPoolName() + ")");proxy = JMX.newMXBeanProxy(mBeanServer, poolName, HikariPoolMXBean.class);} else {log.info("{}, {}, {}, {}", proxy.getTotalConnections(), proxy.getActiveConnections(), proxy.getIdleConnections(), proxy.getThreadsAwaitingConnection());}} catch (Throwable cause) {log.error("fail》》", cause);}}}

配置

spring.datasource.hikari.register-mbeans=true

必须得至少获取一个连接, 不然会一直报错

java.lang.reflect.UndeclaredThrowableException: nullat com.sun.proxy.$Proxy174.getTotalConnections(Unknown Source) ~[?:?]at com.bestpay.redbag.web.controller.MrathenaController.datasource(MrathenaController.java:38) ~[classes/:?]at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_202]at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_202]at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_202]at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_202]at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE]atjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)~[?:1.8.0_202]

可配调整如下配置来测试效果

spring.datasource.hikari.maximum-pool-size=50spring.datasource.hikari.minimum-idle=50spring.datasource.hikari.connection-timeout=250

监控 Hikari 连接数的最好实现方式是,参考 源码logPoolState

/*** @see HikariPool#logPoolState(java.lang.String...)*/public static String poolState(HikariDataSource dataSource, boolean ifLog, String... prefix) {String poolName = dataSource.getPoolName();HikariPoolMXBean mx = dataSource.getHikariPoolMXBean();String format = String.format("%s - %sstats (total=%d, active=%d, idle=%d, waiting=%d)",poolName, (prefix.length > 0 ? prefix[0] : ""),mx.getTotalConnections(),mx.getActiveConnections(),mx.getIdleConnections(),mx.getThreadsAwaitingConnection());return format;}

记得点「」和「在看」↓

爱你们

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。