Druid数据库连接监控:手把手教你查清连接哪卡住了

项目上线后突然变慢,接口响应动不动就几秒起步?后台日志没报错,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/* 只暴露给运维内网。监控页面不是摆设,而是你排查数据库性能问题的第一双眼睛。