CPU报警处理方法
更新时间:2023-08-24
概览
百度RDS数据库采集了CPU占用率的监控项,CPU占用率监控是默认添加的报警策略,默认当CPU占用率大于95%时会触发报警,用户可以根据自身情况调整报警阈值。
本文重点讲解存在CPU占用率监控报警的情况下,如何应对和处理。
参考资料
需求场景
CPU占用率监控RDS实例的CPU使用情况。当CPU占用率高时,说明数据库压力大,通常会导致如下现象:
- 数据库响应变慢,SQL执行耗时变长,导致请求超时。
- 数据库读和写的QPS降低。
方案概述
问题发现
CPU占用率问题的发现渠道有如下几种:
- 触发CPU占用率报警的报警阈值,会发送报警信息。
- 访问数据库过程中发现耗时增加,数据库响应能力下降,可能是存在CPU利用率异常,数据库响应时间变长。
- 查看RDS监控趋势图,观察CPU占用率的曲线,如下图例。
问题定位
- 第一步:使用数据库账号登录RDS实例,执行如下命令,查看当前进程状态,是否存在预期中的长耗时SQL:
SHOW PROCESSLIST;
举例:得到结果如下
| 10001 | baidu_dw | 127.0.0.1:39640 | baidu_dba | Query | 163 | Sending data | select t1.id,t1.data, t2.id,t2.data from tb_01 t1,tb_02 t2 where ... |
| 10002 | baidu_dw | 127.0.0.1:39646 | baidu_dba | Query | 158 | Sending data | select t1.id,t1.data, t2.id,t2.data from tb_01 t1,tb_02 t2 where ... |
| 10003 | baidu_dw | 127.0.0.1:39652 | baidu_dba | Query | 153 | Sending data | select t1.id,t1.data, t2.id,t2.data from tb_01 t1,tb_02 t2 where ... |
| 10004 | baidu_dw | 127.0.0.1:39728 | baidu_dba | Query | 88 | Sending data | select t1.id,t1.data, t2.id,t2.data from tb_01 t1,tb_02 t2 where ... |
| 10005 | baidu_dw | 192.168.0.69:39766 | baidu_dba | Sleep | 6 |
- 第二步:分析 通过当前 processlist 展示结果,可以看到有4个长耗时的慢SQL,导致了CPU占用率报警。
问题解决
首先需要确认这些慢查询是否可以终止,如果可以终止,登录RDS执行KILL命令:
KILL threadID;
这时客户端会收到报错信息如下,这是符合预期的:
ERROR 2006 (HY000): MySQL server has gone away
如上例,观察监控趋势图:CPU占用率恢复正常。
相关产品
云监控BCM:专业、可靠、及时的监控服务。