今天早上,運維同學發現生產某個服務 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 隨后降下來了