在Linux环境下查看数据库连接池状态,需结合数据库类型(如MySQL、PostgreSQL等)、应用层连接池实现(如HikariCP、Druid等)及系统工具进行综合分析,以下是具体操作方法和工具使用指南,涵盖原生命令、应用监控和系统级排查。

通过数据库原生命令查看连接状态
不同数据库管理系统(DBMS)提供了内置命令来实时监控连接数及连接状态,这是最直接的连接池状态查看方式。
MySQL/MariaDB
MySQL通过SHOW PROCESSLIST和SHOW STATUS命令查看连接信息:
-
查看当前连接列表:
mysql -u用户名 -p密码 -e "SHOW PROCESSLIST;"
输出包含
Id(连接ID)、User(用户名)、Host(客户端IP)、db(数据库)、Command(当前命令)、Time(连接时长)、State(连接状态)等字段,通过State列可判断连接是否活跃(如Query、Locked)或空闲(Sleeping)。 -
查看连接数相关状态变量:
mysql -u用户名 -p密码 -e "SHOW STATUS LIKE 'Threads_connected';" mysql -u用户名 -p密码 -e "SHOW STATUS LIKE 'Max_used_connections';"
Threads_connected:当前活跃连接数(即连接池中已分配的连接数)。Max_used_connections:历史最大连接数,用于评估连接池配置是否合理。
-
查看连接池配置参数(如最大连接数):
mysql -u用户名 -p密码 -e "SHOW VARIABLES LIKE 'max_connections';"
PostgreSQL
PostgreSQL通过系统视图pg_stat_activity监控连接:
-
查看当前连接详情:
psql -U用户名 -d数据库名 -c "SELECT pid, usename, client_addr, application_name, state, query FROM pg_stat_activity;"
pid:进程ID;usename:用户名;client_addr:客户端IP;state:连接状态(如active、idle);query:当前执行的SQL。
-
查看连接数统计:
psql -U用户名 -d数据库名 -c "SELECT count(*) FROM pg_stat_activity WHERE state = 'active';" psql -U用户名 -d数据库名 -c "SHOW max_connections;"
- 通过
count(*)统计活跃连接数,max_connections为数据库允许的最大连接数(需在postgresql.conf中配置)。
- 通过
应用层连接池监控(以Java应用为例)
若应用使用Java连接池(如HikariCP、Druid),可通过以下方式查看连接池状态:

HikariCP连接池
HikariCP支持JMX监控和日志输出:
-
JMX监控:
使用jconsole或visualvm连接应用JVM进程,在MBeans→com.zaxxer.hikari→Pool(对应连接池名称)下查看实时指标:ActiveConnections:活跃连接数;IdleConnections:空闲连接数;TotalConnections:总连接数;ThreadsAwaitingConnection:等待连接的线程数。
-
日志输出:
在HikariCP配置中开启日志:dataSource: hikari: connection-timeout: 30000 idle-timeout: 600000 max-lifetime: 1800000 maximum-pool-size: 20 leak-detection-threshold: 15000 pool-name: MyHikariPool通过
logging.level.com.zaxxer.hikari=DEBUG查看连接创建、销毁、获取等日志。
Druid连接池
Druid提供内置监控页面和JMX:
-
内置监控页面:
配置Druid StatFilter和WebStatFilter:@Bean public ServletRegistrationBean<StatViewServlet> druidStatServlet() { ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*"); registrationBean.addInitParameter("loginUsername", "admin"); registrationBean.addInitParameter("loginPassword", "123456"); return registrationBean; }访问
http://应用IP:端口/druid,查看实时连接池指标(活跃连接、空闲连接、慢查询等)。 -
JMX监控:
通过JMX工具查看com.alibaba.druid.pool下的DataSource属性,获取连接池使用情况。
Linux系统工具辅助排查
通过系统级工具可分析数据库进程的连接状态,辅助定位连接池问题:
查看数据库进程连接数
-
使用
ss命令(推荐,比netstat更高效):
ss -tulpn | grep 数据库端口(如3306/5432)
输出显示端口监听状态和进程ID(PID),通过
-n避免域名解析,-t显示TCP连接,-u显示UDP连接。 -
使用
netstat命令(传统工具):netstat -anp | grep 数据库端口
-
统计当前连接数:
ss -t | grep 数据库端口 | wc -l
查看数据库进程日志
数据库错误日志常包含连接池相关错误,如MySQL的error.log:
tail -f /var/log/mysql/error.log | grep -i "connection"
常见错误包括Too many connections(连接数超限)、Connection timeout(连接超时)等,可据此调整连接池配置。
分析应用进程日志
若连接池问题由应用引起(如连接未释放),需查看应用日志:
tail -f /var/log/app/application.log | grep -i "hikari|druid"
关注连接泄漏(如Connection leak detection)、连接获取失败(Timeout after ... waiting for a connection)等日志。
常用命令速查表
| 工具/数据库 | 命令/操作 | 作用说明 |
|---|---|---|
| MySQL | SHOW PROCESSLIST; |
查看当前所有连接详情 |
| MySQL | SHOW STATUS LIKE 'Threads_connected'; |
查看当前活跃连接数 |
| PostgreSQL | SELECT * FROM pg_stat_activity; |
查看PostgreSQL连接状态 |
| PostgreSQL | SHOW max_connections; |
查看PostgreSQL最大连接数配置 |
| HikariCP | JMX(com.zaxxer.hikari.Pool) |
实时监控连接池指标(活跃/空闲连接数等) |
| Druid | 访问/druid监控页面 |
可视化查看连接池及慢查询统计 |
| Linux | ss -tulpn | grep 端口 |
查看端口监听及连接状态 |
| Linux | tail -f 日志文件 | grep "connection" |
分析连接池相关错误日志 |
相关问答FAQs
问题1:Linux下如何快速定位数据库连接池满的原因?
解答:可通过三步定位:
- 确认连接数上限:执行
SHOW VARIABLES LIKE 'max_connections'(MySQL)或SHOW max_connections(PostgreSQL),检查当前配置是否过小; - 分析连接来源:通过
SHOW PROCESSLIST(MySQL)或pg_stat_activity(PostgreSQL)查看连接的Host(客户端IP)和State(状态),识别异常IP(如频繁短连接)或空闲连接未释放; - 检查应用日志:查看应用日志中的
Connection leak detection(连接泄漏)或Timeout after waiting for a connection(连接获取超时)等错误,确认是否存在代码层面连接未关闭的问题。
问题2:如何监控Java应用中HikariCP连接池的长期状态?
解答:推荐结合Prometheus和Grafana实现长期监控:
- 暴露JMX指标:在应用启动参数中添加
-javaagent:$(pwd)/jmx_prometheus_javaagent.jar=7070:$(pwd)/hikari-metrics.yml,配置JMX到Prometheus的映射; - 配置Prometheus抓取:在
prometheus.yml中添加应用目标,抓取7070端口的指标; - Grafana可视化:导入HikariCP监控仪表盘(如官方模板),创建图表展示
active_connections、idle_connections、threads_awaiting_connection等指标趋势,设置告警规则(如连接数超过阈值90%时触发告警)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/21686.html