背景
记录一次Mysql连接池泄漏问题排查,问题表现如下:
- Mysql数据库连接持续增加,直至达到最大连接数;
- 业务系统部署在不同的服务器,且存在不同业务系统服务连接相同的Mysql;
- 同一个服务器部署多个业务系统程序,不能根据主机直接确定存在问题的程序。
Sever端排查主机连接数量
在数据库查询各个客户端主机的连接数,找出有问题的主机。
SELECT substring_index(HOST, ':', 1) AS 主机名,
state AS 状态,
count(*) AS 连接数
FROM information_schema. PROCESSLIST
GROUP BY 状态,
主机名;
Client端排查连接
首先,查询数据库端口连接情况
- 在有问题的客户端主机,通过netstat命令查询3306端口,获取异常连接的PID。
netstat -anp | grep 3306
-
输出结果参照如下:
image.png
- 连接数统计命令
# 统计3306端口总连接数
netstat -anp | grep 3306 | wc -l
# 统计java进程3306端口连接数
netstat -anp | grep 3306 | grep java | wc -l
# 统计某个进程(比如pid为1234)的3306端口连接数
netstat -anp | grep 3306 | grep 1234 | wc -l
根据PID查看进程信息
- 使用ps命令查询进程信息,获得具体出现问题的客户端程序
网友评论