记一次生产环境docker服务CPU飙高排查

今天早上,运维同学发现生产某个服务 CPU 持续飙高,于是开始进行排查:

1、首先使用 top 命令,查看 CPU 占用高的进程,得到进程 ID

  

 

2、根据上一步找到的进程ID,ps -ef | grep [进程ID] 找到对应程序

  

 

3、进入程序对应docker容器

   docker exec -iter [容器ID] /bin/bash

 

4、容器内部使用 top 命令,查看 CPU 占用高的进程,得到进程 ID

  

 

5、根据上一步找到的进程ID,使用 top -Hp [进程ID] 找到进程中 CPU 占用高的线程 ID

   

 

 

 

6、使用 printf %x [线程ID] 输出线程 ID 的16进制

   

 

 

 

7、使用 jstack [进程ID] | grep [16进制线程ID] -A60 ,查看线程的堆栈日志

 

 

8、根据查看到的日志,发现是 lettuce 线程占用 CPU 过高,昨天晚上上的版本,开启了 lettuce 自动刷新 Redis 集群拓扑结构的开关,并且设置心跳时间为1秒,应该是这个原因导致的,通知运维把配置开关注释,CPU 随后降下来了

 

posted @ 2021-12-24 17:25  酱油飘香  阅读(1313)  评论(0编辑  收藏  举报