docker容器里面的java进程内存泄露排查

同事反馈java进程的内存越来越大,设置的是2G,但是占用了8G的内存。

docker里面的java进程在宿主机器无法进入,需要先进入docker容器,然后再安排。

1、进入docker容器:

docker exec -it docker_id /bin/bash

2、找到java进程

ps aux

看到Xms是2G

3、使用jmap查看jvm参数:

jmap -heap 8

发现内存占用比分配的大很多,jvm配合没有生效

4、通过下面命令查看当前进程的jvm运行参数:

jcmd VM.flags

网上找了下,发现是xms和xmx写在jar包后面,导致没有生效,修改下就可以了

参考:【148】如何解决Linux上Java的-Xmx参数失效的问题_java -xmx 不生效-CSDN博客

附vm查询工具

1、通过jstat查看gc信息

jstat -gc 8 500

查看具体参数:【Linux篇】jstat命令详解_傻啦猫@_@的博客-CSDN博客

2、使用arthas进行分析(快速入门 | arthas)

1)从宿主机下载arthas:

curl -O https://arthas.aliyun.com/arthas-boot.jar

2)拷贝arthas.jar进入docker容器:

docker cp /home/dy/arthas-boot.jar 3d5a22f05760:/opt/

发现内存占用比分配的大很多

3、使用jmap把gc dump下来分析:

jmap -dump:live,format=b,file=./dump.hprof 8

docker cp 3d5a22f05760:/opt/dump.hprof /home/dy

你可能感兴趣的:(java技术,java,docker)