連接數耗盡導致 1040 - Too many connections 是線上高頻故障。本文匯總核心監控命令、輸出解讀、異常連接處理與自動化巡檢腳本,構建連接數健康度體系。
核心監控命令三板斧
1. 查看最大連接數配置
mysql> SHOW VARIABLES LIKE 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+
預設 151(含 1 個 SUPER 用戶保留),生產常調至 1000-5000。
2. 查看當前連接總數與詳情
-- 僅統計數量
mysql> SHOW STATUS LIKE 'Threads_connected';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_connected | 42 |
+-------------------+-------+
-- 詳細列表(含前 100 條)
mysql> SHOW PROCESSLIST;
-- 全量詳情(需 PROCESS 權限)
mysql> SHOW FULL PROCESSLIST;
3. 關鍵列解讀
| 列 | 含義 | 異常判斷 |
| Id | 連接線程 ID | Kill 目標 |
| User | 連接用戶 | 非預期用戶 |
| Host | 客戶端 IP:Port | 異常來源 IP |
| db | 當前數據庫 | 無庫連接可能泄露 |
| Command | 執行命令類型 | Sleep 過多、Query 長時間 |
| Time | 當前狀態持續秒數 | > 600 秒關注 |
| State | 線程狀態 | Locked、Sending data、Copying to tmp table |
| Info | 執行的 SQL 片段 | 慢查詢、鎖等待 SQL |
異常連接處理:Kill 與防護
-- 強制斷開指定連接
mysql> KILL 15; -- 或 KILL CONNECTION 15
-- 僅終止當前查詢,保持連接
mysql> KILL QUERY 15;
自動化清理長連接腳本
#!/bin/bash
# 清理超過 1 小時 Sleep 狀態的非 root 連接
mysql -uroot -p${PASS} -e "
SELECT CONCAT('KILL ', id, ';')
FROM information_schema.PROCESSLIST
WHERE COMMAND = 'Sleep'
AND TIME > 3600
AND USER != 'root'
AND USER NOT IN ('monitor','backup');
" | mysql -uroot -p${PASS}
連接數不足預警與擴容決策
關鍵指標公式
- 使用率 =
Threads_connected / max_connections × 100%
- 峰值利用率 =
Max_used_connections / max_connections × 100%
分級告警閾值建議
| 級別 | 使用率 | 動作 |
| Info | > 60% | 記錄趨勢,評估增容 |
| Warning | > 80% | 排查連接泄露、優化連接池、準備擴容 |
| Critical | > 90% | 緊急擴容、清理閒置連接、限流熔斷 |
擴容決策矩陣
| 場景 | 方案 | 代價 |
| 應用連接池配置過大 | 調小 pool size、啟用連接驗證 | 低(配置變更) |
| 業務真實增長 | 調大 max_connections + 記憶體評估 | 中(需重啟或動態調整) |
| 連接泄露(未關閉) | 代碼修復 + 臨時 Kill 清理 | 高(需發版) |
| 慢查詢堵塞連接 | 優化 SQL、增加只讀實例分流 | 中高 |
動態調整 max_connections
-- 即時生效,無需重啟(需 SUPER 權限)
SET GLOBAL max_connections = 2000;
-- 持久化需同步修改 my.cnf
[mysqld]
max_connections = 2000
記憶體試算:每連接約消耗 sort_buffer_size + read_buffer_size + join_buffer_size + thread_stack ≈ 4-10MB。max_connections=2000 需預留 8-20GB 記憶體。
巡檢儀表盤關鍵指標
Threads_connected(當前連接)
Threads_running(活躍查詢數)
Aborted_connects(認證失敗/連接中斷)
Connection_errors_max_connections(因滿拒絕次數)
Max_used_connections(啟動以來峰值)
連接數監控不是看數字,是看趨勢、懂業務、知代碼。將巡檢腳本接入 Prometheus+Grafana,設置分級告警,讓「Too many connections」成為歷史。
copyright ©
萬盛學電腦網 all rights reserved