【JVM调优系列】如何导出堆内存文件
- 创业
- 2025-08-06 02:15:02

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
博客目录 一.非容器启动1.第一步2.第二步3.OOM 自动生成文件 二.容器启动1.容器的基本信息2.Dockerfile 配置3.启动脚本 一.非容器启动 1.第一步 #第一步:通过jps命令确认jvm进程号 [root@dataprocess-server]# jps -l 19570 customer-datap-1.3.2.jar 10589 sun.tools.jps.Jps 2.第二步 #第二步:通过jmap命令dump堆内存文件到指定目录 [root@dataprocess-server]# jmap -dump:format=b,file=/temp/dump.thprof 19570 Dumping heap to /temp/dump.thprof ... Heap dump file created 3.OOM 自动生成文件配置OOM自动生成dump文件:
在 Java 虚拟机(JVM)启动时,可以通过设置一些参数来配置 OutOfMemoryError(OOM)时自动生成 Dump 文件。Dump 文件是 JVM 在遇到 OOM 时生成的一种内存转储文件,它包含了 JVM 堆内存的快照,有助于诊断内存溢出问题。
#JVM在发生OutOfMemoryError时生成Heap Dump文件 java -XX:+HeapDumpOnOutOfMemoryError -jar your_application.jar #指定Heap Dump文件的输出路径 java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump/files -jar your_application.jar #当发生OutOfMemoryError时,执行指定的命令 java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump/files -XX:OnOutOfMemoryError="kill -9 %p" -jar your_application.jar 二.容器启动 1.容器的基本信息 #docker容器的基本信息 docker stats #这里的PIDS是容器内的PID,基本上没什么用 2.Dockerfile 配置 FROM openjdk:latest RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' >/etc/timezone WORKDIR /home USER root ENV PROFILE="dev" ENV LC_ALL en_US.UTF-8 ENV LANG en_US.UTF-8 ENV JAVA_OPTS="\ -Xms4g \ -Xmx4g \ -Xmn2g \ -Xss1m \ -XX:SurvivorRatio=8 \ -XX:MaxTenuringThreshold=10 \ -XX:+UseConcMarkSweepGC \ -XX:CMSInitiatingOccupancyFraction=70 \ -XX:+UseCMSInitiatingOccupancyOnly \ -XX:+AlwaysPreTouch \ -XX:+HeapDumpOnOutOfMemoryError \ -XX:HeapDumpPath=:./logs/gc \ -verbose:gc \ -XX:+PrintGCDetails \ -XX:+PrintGCDateStamps \ -XX:+PrintGCTimeStamps \ -Xloggc:./logs/gc/gc.log \ " ENV PARAMS="" COPY ./insight-provider/target/*.jar /home/app.jar EXPOSE 80 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' >/etc/timezone RUN echo -e 'mkdir -p ./logs/gc && java $JAVA_OPTS -jar ./app.jar --spring.profiles.active=$PROFILE $PARAMS' > entrypoint.sh ENTRYPOINT ["sh", "entrypoint.sh"] 3.启动脚本 #!/usr/bin/env bash CONTAINER_NAME=insight-command IMAGE_NAME=xxx.xxx.com/xxx-uat/xxx-xx-xx-insight-command:$1 docker rm -f ${CONTAINER_NAME} docker rmi ${IMAGE_NAME} docker pull ${IMAGE_NAME} docker run -d --name ${CONTAINER_NAME} \ --privileged=true \ -e PROFILE=uat \ -e PARAMS="--logging.level.root=info" \ -w /home \ -p 8090:80 \ -v $PWD/logs:/home/logs \ -v /home/uploads:/home/uploads \ --restart=always ${IMAGE_NAME} docker logs -f --tail 500 ${CONTAINER_NAME}觉得有用的话点个赞 👍🏻 呗。 ❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
【JVM调优系列】如何导出堆内存文件由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【JVM调优系列】如何导出堆内存文件”