项目上线后突然变慢,接口响应动不动就几秒起步?后台日志没报错,SQL执行也挺快,但就是连不上库、查不出ref="/tag/426/" style="color:#643D3D;font-weight:bold;">数据——八成是数据库连接池出问题了。用 Druid 的朋友,别急着重启服务,先打开它的监控页面看看。
为什么 Druid 监控特别实用
Druid 不只是个连接池,它自带了一套轻量但够用的 Web 监控界面,能实时看到当前活跃连接数、等待线程、SQL 执行耗时、慢 SQL 列表,甚至每个连接是从哪个类、哪行代码申请的。比如你发现某个定时任务一跑,连接数就飙到 98%,再点开‘活跃连接’列表,直接看到是 OrderService.java:142 那行没关 PreparedStatement ——问题当场定位。
三步开启 Druid 监控
以 Spring Boot 2.x + Druid 1.2.x 为例,在 application.yml 里加几行:
spring:
datasource:
druid:
web-stat-filter:
enabled: true
stat-view-servlet:
enabled: true
url-pattern: /druid/*
login-username: admin
login-password: 123456
启动项目后,浏览器访问 http://localhost:8080/druid,输入账号密码就能进监控首页。默认会展示总连接数、活跃/等待/超时连接等核心指标,右上角还有「SQL 监控」「URI 监控」「Spring 监控」几个标签页。
重点看这四个地方
①「数据源」页签:看「当前活跃连接数」是否长期接近 maxActive(比如设了 20,却常年卡在 19)。如果持续高位,说明有连接没释放,或者 SQL 执行太慢拖住连接。
②「SQL 监控」页签:按执行时间倒序,一眼揪出耗时 >1s 的 SQL。点击某条 SQL,能看到调用堆栈、参数值、执行次数和平均耗时。曾有个同事发现一条 SELECT * FROM user WHERE name LIKE '%张%' 每天跑 3000 多次,平均 842ms,顺手加了索引,连接池压力立马下来了。
③「活跃连接」页签:列出所有正在使用的连接,包括创建时间、持有线程名、JDBC URL 和调用来源。鼠标悬停「Hold Time」列还能看到已占用多久——超过 30 秒的基本可以判定是代码漏了 close()。
④「Wall 过滤器」页签(需开启):如果配置了 wall 防火墙规则,这里能捕获非法 SQL,比如没有 WHERE 条件的 DELETE 或 UPDATE,避免误操作打爆数据库。
小技巧:生产环境安全加固
线上千万别用默认账号密码。可以在配置里加 IP 白名单:
spring:
datasource:
druid:
stat-view-servlet:
allow: 127.0.0.1,192.168.10.100
或者配合 Nginx 做基础认证,把 /druid/* 只暴露给运维内网。监控页面不是摆设,而是你排查数据库性能问题的第一双眼睛。