生产内存溢出,通过jprofiler对dump文件进行分析

 

 

选择"Open Snapshot",点击"Open a single Snapshot "加载dump文件.

若dump文件jProfiler无法识别,则可以直接修改后缀,如:*.hprof,*.jps,*.bin等

加载dump文件完成,界面如下: 

作者插入,重点关注"Current Object Set" 和"Thread Dump",即:

1.Current Object Set: 确定相关对象,找到对应的线程.

2.在Thread Dump中查找对应的线程,确定方法调用栈,找到具体的业务操作.

 

言归正传,因内存溢出,更多的关注占内存大小,可以点击"size"排序,对内存占用最多的对象进行分析

下面以占内存最大对象为例,具体分析

 

 

已经访问到基础类java.lang.Object[],则此时可以点击"Biggest Objects",查看占内存最大对象,即查看刚刚创建的Todo列表,点击单一对象,为相关业务对象具体内容.如果对相关业务熟悉,应该已经知道什么业务的处理对象了.

点击"show in graph" ,可以通过调用链,可以查找到对应的线程栈.

调用链截图,如下: 

 

具体线程调用栈信息

 至此,已经找到了相关业务的调用方法,再具体分析相关代码,找出原因,进行优化即可解决内存溢出问题.

简单说明:线上问题,因一次性调用过多数据,其列表对象就是Todo对象(大对象),导致加载到内存太大,GC无法及时处理,导致内存溢出.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值