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

  • Post author:
  • Post category:java


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

2: top 查看 pid, 如图所标为8

在这里插入图片描述

3: find / -name jstack , 查看一下自己容器的java目录在哪个位置

在这里插入图片描述

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 查看线程占用情况

在这里插入图片描述

7:发现pid 213的战用CPU挺高的, 把PID换算成16进程,如 213 换算出16进制是 d5

printf “%x\n” 213

8: 去日志里搜索0xd5的相关日志去排查原因, 最后定位到是这个方法getDataDetail里需有问题

在这里插入图片描述



版权声明:本文为weixin_36066421原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。