线上容器cpu持续飙高排查思路(docker版)

总流程

1、查看docker的cpu占用率:docker stats
2、进入cpu占用高的docker容器:docker exec -it 容器编号 /bin/bash
3、查看容器中具体进程cpu占用率,执行top,(如top命令无法使用,执行:export TERM=dumb ,然后在执行:top)
4、查看进程中线程cpu占用率:top -H -p 进程号
5、将异常线程号转化为16进制: printf “%x\n” 线程号
6、查看线程异常的日志信息:jstack 进程号|grep 16进制异常线程号 -A90

分解:
步骤123跳过,看步骤4的执行结果
在这里插入图片描述
29,30,31三个线程是疯狂回收内存,导致持续高占用CPU。
现在要想知道具体哪个线程导致了内存的爆满,按上面网友提供的思路,已经断了,所以步骤5,6直接跳过,如果是非内存回收导致的CPU飙高可以继续走步骤5,6来排查。

继续观察线程变动,注意到有一个idle_connection的command也在不间断占用40-50%的CPU(截图省略),判断是数据库连接超时导致进入死循环,我这线上环境使用阿里云ecs+阿里云rds数据库,重启容器后恢复正常,idle_connection的线程也消失了,到目前为止粗略判断是超时问题导致,目前下的结论还需要持续观察判断,有结论及时更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值