xshell单文件版_问题定位系列|如何打开、分析40G的Java Dump文件?

一、前言

我司大数据平台采用yarn client模式将spark任务提交到yarn上执行,并且平台的所有离线任务都共用一个driver/client进程。在最近的一个数据湖项目中,业务流程多达上百个,内存使用越来越多(现场配置了JVM max heap 60G),在持续运行4~5天后,便会出现心跳超时问题,最终导致Kill离线yarn application。

笔者以往打开、分析Dump文件,主要采用下面两种方法:

1、独立运行的memory analyzer去加载dump文件。

2、在linux 上使用memory analyzer,用ParseHeapDump.sh脚本直接分析dump文件,然后再去查看网页版分析结果即可。

面对40G的大dump文件,我司的办公PC机物理内存仅有8G,用Memory Analyzer加载该Dump时,必会出现OOM异常。(方法一被摒弃)

第二种方式得到的是网页分析结果,运维同事觉得信息不够丰富,比如说看不到实例的调用堆栈信息,因此方法二也被摒弃。

最终在参考链接1的启发下,找到了可行的方法——Linux上启动visualvm进程,利用xmanager、xshell软件,将visualvm 界面在window系统上展示,最后在window界面查看visualvm分析结果。(此处利用的是Linux服务器的内存,我司服务器内存通常都有250GB)。

二、具体使用步骤

2.1 安装xmanager和xshell

在笔者实践过程中,曾经参考csdn的一篇博客,利用xming+xshell/putty软件来让visualvm分析界面在Window界面展示,但后面发现不需要这么麻烦,在我的PC机器上,利用xshell 5、xmanager 4也可以达到同样的效果。

在windows机器上安装xshell、xmanager的过程便不再阐述。下面是我使用的xshell、xmanager版本(提供的是最新版本的,亲测可用),百度网盘链接:

链接:https://pan.baidu.com/s/1qKwGAUSjDAFBMWHB0FxM3A 提取码:bzj0

注:

  • 在官网下载,需要填写个人信息,且xmanager 3版本安装后,并不能将visualvm在window界面展示。

2.2 下载、安装visualvm

在笔者使用的x86机器上其实已经安装了1.8版本的JDK,但是在使用过程中,出现了各种不顺,下面是其中一个异常:

java.lang.IndexOutOfBoundsException        at java.nio.Buffer.checkIndex(Buffer.java:546)        at java.nio.DirectByteBuffer.getLong(DirectByteBuffer.java:776)        at org.netbeans.lib.profiler.heap.AbstractLongMap$MemoryMappedData.getLong(AbstractLongMap.java:325)        at org.netbeans.lib.profiler.heap.AbstractLongMap.getID(AbstractLongMap.java:124)        at org.netbeans.lib.profiler.heap.AbstractLongMap.put(AbstractLongMap.java:93)        at org.netbeans.lib.profiler.heap.LongMap.put(LongMap.java:247)        at org.netbeans.lib.profiler.heap.ClassDumpSegment.createClassCollection(ClassDumpSegment.java:203)        at org.netbeans.lib.profiler.heap.HprofHeap.getAllClasses(HprofHeap.java:121)        at org.netbeans.lib.profiler.heap.ComputedSummary.(ComputedSummary.java:27)        at org.netbeans.lib.profiler.heap.HprofHeap.getSummary(HprofHeap.java:240)        at org.netbeans.modules.profiler.heapwalk.HeapWalker.createHeap(HeapWalker.java:157)        at org.netbeans.modules.profiler.heapwalk.HeapWalker.(HeapWalker.java:54)        at com.sun.tools.visualvm.heapdump.impl.HeapDumpView$MasterViewSupport$1.run(HeapDumpView.java:116)        at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1384)

最终,笔者去visualvm官网下载了一个独立visualvm版本,相比JDK自带的visualvm,自带了很多插件,界面风格也更漂亮~

visualvm官方地址:https://visualvm.github.io(很奇怪,我的笔记本网络打不开这个链接,手机浏览器可以打开并下载visualvm)。此处,也给小伙伴提供一个百度网盘链接地址:

链接:https://pan.baidu.com/s/1Kd5RPXYm-waOFF3TyNdJJQ 提取码:kdkn

2.3 修改jvisualvm运行配置

默认情况下,JDK自带的jvisualvm运行堆内存仅有256m,独立的visualvm默认最大堆内存也不超过1G。在使用JDK自带的jvisualvm时,曾出现如下异常:

758bdcb1fb7ada56973c589fd310735e.png

根据异常信息提示,肯定是jvisualvm内存不够,但是修改点并不是界面上显示的etc/netbeans.conf,因为在jdk整个目录下都找不到该配置文件。最终,在lib目录下找到一个叫visualvm.conf配置文件,最终找到配置Xmx的地方。

若使用的是独立下载的visualvm,在安装目录etc/visualvm.conf中即可修改。

2.4 启动jvisualvm

使用如下命令启动即可。

jvisualvm

启动后,load需要加载的dump文件

ec9735d526338b6f48621c8d7088ab15.png

等待加载完毕,界面如下:

214740d4762115541facaae7f0e80ab0.png

至此,就可以去分析应用的内存问题啦~

参考链接

https://blog.csdn.net/tszxlzc/article/details/80779080https://blog.csdn.net/tszxlzc/article/details/80779080

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值