容器cpu使用率持续100%的问题定位方法



版权声明:本文为作者原创文章,遵循
CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
1、问题现象:在容器管理上监控到受理中心容器cpu使用率持续大于100% 。
2、定位步骤:
1)ssh到对应主机,执行命令 docker ps -a |grep 端口,可以获取到容器id。
2) 进入容器docker exec -it 容器id bash。
3)执行top命令,获取耗cpu的线程ID。
top -p 1,持续观察进程cpu使用率,按shift + h 切换成线程cpu使用情况,持续观察可以获取到cpu使用率高的线程pid。
4)用计算器或者printf "%x\n" 十进制的pid 例如 printf "%x\n" 640
以上命令可以获取十六进制的javacore中的nid,注意十六进制用计算器获得的结果大写字母要转换成小写。
5) 获取javacore: jstack -l 1 >a1.log。
6)用vi命令在a1.log中查找第四步获取到的十六进制nid ,即可定位耗cpu的线程堆栈。
例如:
7)根据线程堆栈中指示的业务代码进一步分析。
3、根据业务代码发现产生了while死循环的可能,进一步分析和修改业务代码。
如果您觉得不错,就打赏支持一下吧〜

已有 1 人进行打赏
行业级分享👍🏻