docker容器中打印java堆栈日志,定位线上CPU高的问题

1:进入容器, docker exec -it 容器名 /bin/bash

2: top 查看 pid, 如图所标为8
docker容器中打印java堆栈日志,定位线上CPU高的问题
3: find / -name jstack , 查看一下自己容器的java目录在哪个位置
docker容器中打印java堆栈日志,定位线上CPU高的问题
4:/usr/lib/jvm/java-8-openjdk-amd64/bin/jstack -l 8 > /opt/busuac.jstack.log
把堆栈日志打到opt目录下

5:日志到手,当然就可以放到copy到宿主机上去,然后再下载到桌面上慢慢分析了,我这里拷贝到了宿主机的opt目录上
到宿主机上打 docker cp pre_dcserver_1:/opt/busuac.jstack.log /opt

6:top -Hp pid 查看线程占用情况
docker容器中打印java堆栈日志,定位线上CPU高的问题
7:发现pid 213的战用CPU挺高的, 把PID换算成16进程,如 213 换算出16进制是 d5
printf “%x\n” 213

8: 去日志里搜索0xd5的相关日志去排查原因, 最后定位到是这个方法getDataDetail里需有问题
docker容器中打印java堆栈日志,定位线上CPU高的问题