jvm内存溢出排查(使用idea自带的内存泄漏分析工具)

文章目录

1.确保生成内存溢出文件

想分析堆内存溢出,一定在运行jar包时就写上参数-XX:+HeapDumpOnOutOfMemoryError,可以看我之前关于如何运行jar包的文章。若你没有写。可以写上参数,重启你的项目,等你的项目发生下一次堆内存溢出异常,在运行的同级文件夹,将产生类似这样一个文件java_pid74935.hprof,若你已经有这个文件,那么可以继续往下看。

2.使用idea自带的内存泄漏分析工具

在Java界,有太多这样的工具了,如:

  • Eclipse Memory Analyzer(MAT):MAT是一个功能强大的内存分析工具,用于分析Java堆转储文件(如.hprof文件)。它可以帮助你识别内存泄漏、查找对象的引用链、分析对象的大小和数量等。MAT提供直观的图形界面和交互式报告,使你能够深入了解应用程序的内存使用情况。

  • VisualVM:VisualVM是一个功能齐全的Java虚拟机监控和分析工具。它包含了一系列插件和功能,可以监视应用程序的内存使用、线程状况、垃圾收集等。VisualVM还提供了堆转储和线程转储功能,方便你进行更详细的分析。

  • YourKit Java Profiler:YourKit是一款商业级的Java性能分析工具,具有强大的内存分析功能。它可以帮助你发现内存泄漏、定位内存消耗高的代码路径,并提供详细的对象和堆栈跟踪信息。YourKit还提供了实时的性能监控和分析,帮助你优化应用程序的性能。


这些工具的使用下载,百度谷歌都有相关资料。But!!! 我这么懒的人你指望我下载一个工具去分析???成心难为我是吧!

我直接用idea!在新版本的idea里,有这么一个东西,像一个仪表盘,自打我学习Java,用上idea,一直不知道这是做什么的,直到今天为了搞内存分析,这可太神奇了,IDEA yyds!

小仪表盘的名字叫Profiler,至于这个Profiler在idea的哪里打开。谷歌给我的信息如下:

要使用CPU Profiler,请在IntelliJ IDEA 中打开「Run」菜单,然后选择「Profile CPU」。 您还可以在「View」菜单中选择「Tool Windows」,并选择「CPU Profiler」,以显示该工具的图形界面。

不过我这个idea2023版本貌似页面上就有。这里让我们打开溢出heap文件。

打开后页面如下

观察可知。大对象是哪个类,在哪一行产生,占据了多少内存,以及饼图其实都有,这里只是引路,至于内存分析的理论知识,就需要你再研究研究了。基于这一篇内容,你是可以知道如何用工具分析内存溢出文件,还有怎么产生内存溢出文件。

3.具体实验一下

如图,我刻意在这个类里写了个不断产生对象的代码,刻意制造堆溢出。然后分析可得。

直接检测到这个类的哪一行不断产生大对象导致堆溢出,easy~

相关推荐
yxlalm3 小时前
Spring AI+RAG 01-项目背景与技术选型
java·人工智能·spring
程序员清风3 小时前
Java 后端高并发设计:线程池、限流、熔断与降级
java·数据库·oracle
Seoyoneh4 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
海南java第二人4 小时前
对外 API 如何保证幂等性?插入数据 / 上传表格场景全方案汇总
java·幂等性
tryxr4 小时前
Chat2Excel 文件服务模块上传文件功能开发
java·项目·oss·easyexcel·文件服务
Tangyuewei4 小时前
Java 写 Agent:模型只是组件
java·开发语言
彧azz5 小时前
Java学习语法篇:变量
java·学习
信誓旦旦的程序猿6 小时前
【量化系统从零构建 #04】存储设计:选型·建库·交易日历
java·人工智能·python·股票数据api·股票数据·股票数据api接口·股票api数据接口
yurenpai(27届找实习中)6 小时前
Java 10 的 var 为什么不能随便用?从订单汇总看懂类型推断与泛型陷阱
java·开发语言·java18
Flynt7 小时前
把公司项目迁到 Spring Boot 4.0:编译通过只是开始
java·spring boot·后端