【JVM】通过JProfiler来分析内存泄漏(OOM)问题

本文介绍了如何通过JProfiler工具来定位和分析Java应用程序中的内存泄漏问题。当遇到OOM错误时,除了检查日志和调整JVM内存设置,还可以利用JProfiler进行深入分析。通过在启动命令中配置参数生成堆栈日志,然后使用JProfiler打开.hprof文件,可以详细查看内存占用情况,追溯问题代码,从而有效定位和解决内存溢出问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过JProfiler来分析内存泄漏(OOM)问题

OOM介绍

  • OOM 是 “Out Of Memory”的简写,即内存耗尽。
  • 当 JVM 因为没有足够的内存来为对象分配空间,并且垃圾回收器也已经没有空间可回收时,就会抛出这个错误。
  • 导致OOM的原因有多种,主要为内存分配过少和代码漏洞。

定位OOM

昨天项目还很健康,今天就病了,肯定是别人下毒,这种说法是不对的。

既然OOM已经发生了,那就查查是什么原因导致了这个问题。

首先bug的定位,程序员第一时间肯定想到的查看报错日志,download日志之后,如果运气好,报错的地方刚好就是导致OOM的代码,那么恭喜你,请修复他。

但是如果日志内的报错指向了很多的业务代码,甚至没有指向,那么日志就失去了作用,这时候,我们要首先去看看JVM分配的大小,之前分配的大小也许够之前用,但是增加了业务逻辑,或者遇到了高并发场景,内存的使用就上去了,以前申请的JVM内存大小可就不够用了。

增加了JVM内存大小之后,发现还是会频繁溢出,那这就是代码出了问题,既然日志已经定位不了了,那我们上工具吧。

JProfiler安装

官方网址:https://www.ej-technologies.com/download/jprofiler/version_92

IDEA启动JProfiler

  • setting>>Plugins 市场搜索JProfiler
  • 安装之后,重启IDEA,可通过Profiler启动项目,对项目进行监控

截图.png

截图.png

分析服务器上的内存溢出

  1. 项目启动命令添加OOM的堆栈日志输出
nohup java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/java/project/idv

截图.png

  1. 发生OOM时会向指定文件夹输出.hprof快照文件,文件大小为启动项目时设置的堆内存大小

截图.png

  1. 下载快照文件至本地,通过JProfiler打开

截图.png

  1. 经过一段时间的解析,界面如下分析

截图.png

  1. 双击第一个非基本数据类型的对象

截图.png

  1. 查看这个对象集的合并的传入引用

截图.png

  1. 部分引用可以很快递归追溯到出问题的代码

截图.png

  1. 在项目中搜索堆栈日志内比较独特的对象,也可以定位大概是什么功能导致OOM

截图.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值