本篇文章比較偏筆記形式,記錄了今天排查解決的一個異常,解決過程當中沒有保存記錄圖片,因此未配圖mysql
環境:ASP.NET Core 3.1sql
Mysql 驅動:mysqlconnector數據庫
今天在測試環境,測試工程師反應不少接口500錯誤,異常信息是 「To many connections」,由於是微服務架構,多個服務出現這個狀況 ,而且有同事的navicat也鏈接不到MySql。架構
根據此狀況分析排除了代碼緣由(這塊我寫的,因此結合現有狀況作了排除)形成鏈接數爆掉,多是達到數據庫的鏈接數限制。微服務
show variables like 'max_connections';
查看最大鏈接數:100測試
show processlist;
統計目標數據庫鏈接數達到了 100 滿了。code
根據數據庫過濾使用此SQL比較方便:SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST where DB='<dbname>'
接口
至此問題找到。圖片
當務之急是先行恢復數據庫的使用,因此臨時設置了鏈接數限制到1000(永久設置須要改mysql配置文件)ssl
SET GLOBAL max_connections = 1000;
執行後,服務恢復正常。
恢復後經過 show processlist;
觀察鏈接數,幾乎穩定在 10x,且發現有來自一個局域網的IP長時間佔用了46個鏈接數,遂排查開發人員電腦IP,未發現匹配的。
根據IP統計鏈接數 SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST where HOST like '192.168.2.2%'
後問同事,才知曉MySql數據庫鏈接信息提供給了測試工程師來編寫測試腳本,而後過去排查,發現果真是測試工程師寫的腳本問題,至此引起問題的緣由找到並解決。
因爲是本地測試環境,因此並無對數據庫的鏈接數限制作設置,用的默認值。