今天上午線上的服務突然訪問緩慢,頁面大量訪問超時,用戶開始報障。立即遠程連接應用服務器進行日志的排查,發現大量的數據庫連接異常。現像如下:猜測可能是MySQL連接數占滿或者mysql服務異常導致問題。
數據庫連接異常
1.首先遠程連接mysql服務器
mysql -h ip -u root -p -P 3306
例如:mysql -h ××.××..××..××. -P 3306 -u xx-p
-h指定遠程 ip地址 -P指定端口號 -u 指定用戶名 -p 指定密碼
幸運的遠程連接成功,說明mysql服務應該沒有問題,可能是連接數的問題。
2.查詢可用連接數和最大連接數,發現連接數占滿
連接數使用情況
3.查詢當前running sql執行時間最長的10條
Select * frominformation_schema.processlist where info is not null order by time desc limit10 ;
發現有同一條sql大量占用mysql 連接數,導致mysql連接數占滿,排查是一個批量推送的服務觸發了,首先先屏蔽點批量推送功能,進行發版本并重啟服務。
4.通過命令生成殺進程腳本
`select concat('KILL',id,';') from information_schema.processlist where user='root' into outfile '/var/lib/mysql-files/a.txt';`
或者增加時間條件
`select concat('KILL',id,';') from information_schema.processlist where user='root' and time>100 into outfile '/var/lib/mysql-files/aa.txt'; `
5.執行殺連接數腳本
source /var/lib/mysql-files/a.txt
6.查詢線程執行狀態
show status like 'Threads%'
批量kill 調連接數后服務正常;
經過緊張有序的排查,順利解決線上的突發問題。