浏览 1.9k
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死循环的可能,进一步分析和修改业务代码。
按点赞数排序
按时间排序