当前位置:首页 > 内存 > 正文

java内存溢出dump文件命令

  • 内存
  • 2024-08-18 02:01:01
  • 5862

一、eclipsememoryanalyzer怎么使用系统上线后,程序报内存不足错误。一方面,我们应该先增加程序使用的内存,以解决燃眉之急。另一方面,我们希望有一个工具可以找到内存泄漏的原因。
通过查阅资料,找到了Eclipse插件MemoryAnalyzer。我们来讨论一下如何使用它。
首先,获取Heapdump文件。
1.设置JVM参数,-XX:+HeapDumpOnOutOfMemoryError,内存溢出时会创建Heapdump文件
2.(Windows可以通过任务管理器看到pid)
Java5:jmap-heap:format=b;
Java6:jmap-dump:format=b,file=
3.在本机上运行java程序时,直接通过MemoryAnalyzer创建Heapdump文件。
二、记一次线上内存溢出问题排查过程商家评论后台管理页面打不开,报错。通过后台日志发现无法联系zookeeper,找不到dubbo服务提供者。因为之前其他在线服务连接ZooKeeper也有问题。使用ps-ef|grepjava命令查找Java进程号,然后使用jmap-heappid命令检查jvm堆内存使用情况。结果如下:
可以看到,堆内存使用率为100%。
现在我们知道服务因内存溢出而崩溃,我们需要导出堆内存映像进行分析。使用命令ps-ef|grepjava查看堆内存溢出时保存的日志文件的路径。这里说一下,需要在java程序启动时添加参数,以便在发生堆溢出时自动生成hprof文件。参数:-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=文件路径。获取堆内存映像后,尽快重新启动并使服务恢复在线状态。接下来的分析过程我使用EclipseMemoryAnalysisTools(MAT)来分析第一次在MacOS上使用该工具时出现两个小问题:
打开工具时出现错误,无法写入平台元数据:/private/var/folders/8m/tgf显示包内容并找到并编辑它,添加参数:-data下一行是数据存储路径
2打开图像文件时,出现错误:Aninsideerrorreturnedwhile:"解析heapdumpfromXXX,因为我的镜像文件超过2G,但是ini文件中的参数-Xmx1024m默认只有1G,所以修改该参数为-Xmx4096m
成功打开文件LeakSuspectsReport后,自动解析可能泄露的对象,看起来像这样: