今天早上,运维同学发现生产某个服务 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 随后降下来了