visualvm分析dump文件_【深入浅出VisualVM】(2):分析堆内存OOM

本文介绍了如何使用VisualVM工具分析Java应用程序的堆内存溢出问题(OOM)。通过案例展示了如何设置JVM参数触发并生成dump文件,以及如何利用VisualVM加载dump文件,定位导致OOM的异常线程和对象。解决方案包括增大堆大小和优化大对象存储,还提到了堆dump文件的比较和OQL查询。

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

3ae3ff0aa5443014534d230edf3d41e2.png

  • 概述 
    显示jvm运行时的参数,Java版本,以及系统属性。

  • 监控 
    显示当前这个pid的cpu,堆,PermGen,类,线程的运行情况,可以主动进行垃圾回收,以及生成此时刻的dump文件。

  • 线程 
    显示所有线程的“实时”状态(运行,休眠,等待,监视)以及时间,(调整好刷新时间),可以通过放大,放小,更细致的观察线程的状态,以及一个线程详细的时刻状态和线程dump堆栈。

  • 抽样器 
    随机抽样快速检测,显示各个方法和线程的cpu耗时,以及堆区各个实例、方法区各个类、以及每个线程所占内存详细信息。

39ac63fc60e06a722ca6f2b6e05c916b.png

  • Profiler

    功能和抽样器差不多,只不过是全面检测,比较慢而已(类似杀毒软件的快速扫描和全盘扫描)。

OOM在JVM中发生的地方只有堆,栈,方法区,直接内存。

Java程序大多发生OOM是在堆区域,堆dump 是分析内存堆的唯一文件,可以由VisualVm,IBM HeapAnalyzer,Jhat,Eclipse MemoryAnalyzer等分析,这里单独介绍VisualVm。

案例:堆内存的OOM

设置JVM 启动参数 -Xmx1024m -Xms1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/dump (其中堆 1,073,741,824个字节,字节与m相差大约6个倍数)运行下面程序,则会发生OOM的时候,生成堆文件,目录在d盘dump文件夹下(或者设置VisualVm中右键该应用,发生OOME自动生成dump)。

当然生产的时候,并不是等到OOM才生成dump文件,直接用 jmap -dump:format=b,file=xxx.hprof 24331 jmap是jdk自带工具,format=b是代表二进制,file代表生成路径 24331代表pid,可以用 ps -ef | grep 进程名 找到 ,当然jmap还有很多功能,查看JVM堆对象占用情况,JVM内存状态等,这里不多介绍。

packa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值