cpu到达100%问题排查

0、背景

首先定位到mysql 的cpu使用率较高

原因是任务域的作业实例补偿定时任务相关sql查询问题,该sql 2min执行一次,一次查询两次,导致cpu飙升,可考虑优化sql,添加以下索引

ALTER TABLE
`scheduler`.`tbl_simba_os_scheduler_job_instance`
ADD
INDEX idx_modify_time (`modify_time`) USING BTREE,
ALGORITHM = INPLACE,
LOCK = NONE;

ALTER TABLE
`scheduler`.`tbl_simba_os_scheduler_job_instance`
ADD
INDEX idx_timing_time (`timing_time`) USING BTREE,
ALGORITHM = INPLACE,
LOCK = NONE;

 

1、top

这里数据是波动的,可持续观察一段时间,检查cpu飙升情况

cpu到达100%问题排查_第1张图片

查询某个进程cpu使用情况:top -Hp pid

cpu到达100%问题排查_第2张图片

2、pidstat -u 查看一下CPU使用率

每秒cpu的使用率

cpu到达100%问题排查_第3张图片

​pidstat -t -p 2977 查看mysql 线程使用的cpu,4个cpu,总共占用了28%的cpu

cpu到达100%问题排查_第4张图片

3、 用root账号登录mysql,查看这个线程使用的语句

SELECT * FROM performance_schema.threads WHERE THREAD_OS_ID = 24352 OR THREAD_OS_ID = 24353\G

查询mysql运行的当前的进程:

select * from information_schema.PROCESSLIST where info is not null \G;

4、若无法定位sql,可结合服务内部cpu情况,定位占用cpu较高的sql

这里使用arthas定位服务占用cpu百分数

curl -O https://arthas.aliyun.com/arthas-boot.jar

java -jar arthas-boot.jar

选择进程后,执行dashboard,即可查看整个服务的资源占用和gc等信息。

观察到有两个线程占用cpu较高,且持续增加,进入代码查询执行的sql,结合第3步,定位异常sql

cpu到达100%问题排查_第5张图片

你可能感兴趣的:(java,cpu飙升)