curl -X POST http://app:9000/actuator/refresh -H 'Content-Type: application/json' -d '["log.level"]' SHOW STATUS LIKE 'Threads_connected'; # 刷新前后对比连接数
调了一个日志级别,发布后 30 秒内数据库连接数从 120 冲到 260,超过 max_connections 200 后开始报 Too many connections。应用日志里出现 HikariPool-1 - Shutdown initiated。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:配置刷新监听的是整个配置文件,任意一项变化都会触发数据源 Bean 重建。旧连接池关闭有延迟,新池同时创建,两份连接叠在一起。
围绕「热更新重建连接池」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
处理上按这个顺序:刷新只监听具体 key 不要监听整个文件;连接池这类 Bean 排除在刷新范围外 改动走重启;重建时先关旧池再建新池 加一个等待窗口。
确认没问题再收工,只刷新日志级别时数据库连接数保持在 120 上下,日志里不再出现 Shutdown initiated。
