【JVM基础18】——实践-Java内存泄漏排查思路?

目录

  • [1- 引言:](#1- 引言:)
  • [2- ⭐核心:](#2- ⭐核心:)
    • [2-1 排查思路](#2-1 排查思路)
    • [2-2 步骤1:获取堆内存快照 dump](#2-2 步骤1:获取堆内存快照 dump)
    • [2-3 步骤2、3:使用 VisualVM 打开 dump文件](#2-3 步骤2、3:使用 VisualVM 打开 dump文件)
  • [3- 小结:](#3- 小结:)
    • [3-1 Java内存泄漏排查思路?](#3-1 Java内存泄漏排查思路?)

1- 引言:

首先得明确哪里会产生内存泄漏的问题?

  • 在运行时数据区中的三个部分容易产生内存泄漏的问题
    • JVM Stacks 虚拟机栈 ------> StackOverFlowError
    • Method Area/MateSpace 方法区/元空间------> OutOfMemoryError:Metaspace
    • Heap 堆------>OutOfMemoryError:java heap space
  • 一般需要重点关注的是堆空间的内存泄漏问题,比如大对象一直存活。

2- ⭐核心:

2-1 排查思路

假设在服务器中部署了很多微服务,每个微服务实际上都是一个项目。

每个项目都可能导致内存溢出,比如项目出现了启动时闪退,运行一段时间宕机的问题如何排查?
排查思路

  • 1.获取堆内存快照 dump
  • 2.VisualVM 去分析 dump 文件
  • 3.通过查看堆信息的情况,定位内存溢出问题

2-2 步骤1:获取堆内存快照 dump

1- 通过 jmap 指定打印他的内存快照 dump(dump文件是进程的内存镜像,可以把陈故乡的执行状态通过调试器保存到 dump 文件中)

  • 如果项目在正常运行 :使用 jmap 命令获取运行中程序的 dump 文件
  • format=b 指定格式为 二进制文件
  • file=heap.hprof 设置文件存储的路径
bash 复制代码
jmap -dump:format=b,file=heap.hprof pid
  • 如果程序没有正常运行
  • 有的情况是内存溢出之后,程序会直接中断,而 jmap 只能打印在运行中的程序,生成 dump文件,可以使用一下 vm 参数
bash 复制代码
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/home/app/dumps

2-3 步骤2、3:使用 VisualVM 打开 dump文件

  • 通过查看堆信息的情况,定位内存溢出问题
  • 分析内存泄漏的远原因

3- 小结:

3-1 Java内存泄漏排查思路?

相关推荐
郑州光合科技余经理22 分钟前
本地生活服务系统:成品模块和定制接口怎么划界
java·前端·人工智能·后端·系统架构·php·ai编程
萧瑟余晖34 分钟前
Java深入解析篇三十三之密封类与接口(Sealed Classes)详解
java·开发语言
论迹复利4 小时前
FreeRTOS 在 RISC-V 上是如何“点火“的 —— 从 main() 到第一个任务的完整链路
java·开发语言·risc-v
张宇Joaquin5 小时前
鲲鹏统一并行加速库KUPL--众核并行能力介绍
java·开发语言·网络
爱喝水的鱼丶5 小时前
SAP-ABAP:SAP学习分享:深入理解事务码ME32K——更改采购合同
性能优化·sap·abap·业务学习·开发交流·交流学习·采购合同
宸津-代码粉碎机5 小时前
AI攻防战升级!基于Spring AI构建Java应用自动免疫安全体系
java·大数据·开发语言·人工智能·python·安全·spring
爱喝水的鱼丶6 小时前
SAP-ABAP:ABAP 用户出口开发规范与避坑指南:10 类典型错误与运维方案
运维·性能优化·sap·abap·增强·经验交流·出口
2601_963749106 小时前
越华环保集团数字化污水治理:端边云采集架构与平台对接实现
java·大数据·架构
xcLeigh6 小时前
Go入门:整数类型的溢出与安全边界
java·安全·golang
源码宝7 小时前
SpringBoot+Vue2 诊所门诊管理系统,完整前后端源码,可直接部署上线
java·源码·his系统·门诊系统·程序代码·诊所系统·门诊his