今天上午线上的服务突然访问缓慢,页面大量访问超时,用户开始报障。立即远程连接应用服务器进行日志的排查,发现大量的数据库连接异常。现像如下:猜测可能是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 调连接数后服务正常;
经过紧张有序的排查,顺利解决线上的突发问题。