在工作中遇到docker中的项目PID为1,镜像中JDK为:openjdk:8-jre-alpine,原因是因为jre的包取消了jdk的一些工具内。可在docker中查看相关信息可安装jattach即可解决

1.安装jattach

apk add --no-cache jattach --repository http://dl-cdn.alpinelinux.org/alpine/edge/community/
apk add --no-cache jattach --repository http://mirrors.aliyun.com/alpine/latest-stable/community/

指令集:

  • load : load agent library(导入agent库)

  • properties : print system properties(打印系统属性)

  • agentProperties : print agent properties(打印agent属性)

  • datadump : show heap and thread summary(显示堆和线程概要信息)

  • threaddump : dump all stack traces (like jstack)(导出栈信息)

  • dumpheap : dump heap (like jmap)(导出堆信息)

  • inspectheap : heap histogram (like jmap -histo)(显示堆信息直方图)

  • setflag : modify manageable VM flag(修改可管理的VM参数)

  • printflag : print VM flag(打印VM参数)

  • jcmd : execute jcmd command(执行jcmd命令)

1.1 如使用:jcmd命令:

jattach <pid> jcmd "help -all"

1.2 使用dumpheap命令导出堆载信息

jattach <pid> dumpheap <heap dump file path>


jattach 1 jcmd 'GC.heap_dump -all ./123.hprof'

2.切换为jdk包

切换包后可能出现这一错误:

 # jmap -histo 1
1: Unable to get pid of LinuxThreads manager thread

若是docker-compose.yml,可在编排文件中添加参数:

pid: "host"

将PID模式设置为主机PID模式,跟主机系统共享进程命名空间。容器使用这个标签将能够访问和操纵其他容器和宿主机的名称空间。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐