背景
記錄一次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
-
輸出結果參照如下:
-
連接數統計命令
# 統計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命令查詢進程信息,獲得具體出現問題的客戶端程序