docker容器里面的java进程内存泄露排查
docker里面的java进程在宿主机器无法进入,需要先进入docker容器,然后再安排。网上找了下,发现是xms和xmx写在jar包后面,导致没有生效,修改下就可以了。同事反馈java进程的内存越来越大,设置的是2G,但是占用了8G的内存。发现内存占用比分配的大很多,jvm配合没有生效。1、通过jstat查看gc信息。2、使用arthas进行分析(发现内存占用比分配的大很多。2、找到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 <pid> 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
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)