java内存溢出(OutOfMemoryError)————dump文件以及内存分析
程序员文章站
2022-07-15 14:51:00
...
java内存溢出(OutOfMemoryError)————dump文件以及内存分析
文章目录
当程序出现以下错误时:
- java.lang.OutOfMemoryError: Java heap space
- java.lang.OutOfMemoryError: Java metaspace
- java.lang.OutOfMemoryError: Java Perm Gen
- …
1.dump内存快照
1.1.测试环境(程序启动)
##启动时加上下面两个参数
#1.开启程序出现内存溢出错误时自动dump出内存快照文件,后缀:.hprof 强烈建议无论何种环境,加上此参数
-XX:+HeapDumpOnOutOfMemoryError
#2.指定出内存快照文件的路径
-XX:HeapDumpPath=./
1.2.生产环境(程序运行时)
##如果生产环境中启动时未加上-XX:+HeapDumpOnOutOfMemoryError参数,如果想在不关闭程序的情况下dump内存快照文件
#1.获取java程序的pid,使用jps命令获取pid
jps
#2.使用jmap命令dump文件到指定路径:filepath:文件路径 xxx.hprof pid:java程序的pid
#示例:jmap -dump:live,format=b,file=./test.hprof 42156
jmap -dump:live,format=b,file=<filepath> <pid>
2.分析快照文件
- 使用Jprofiler(收费,功能强大)
- 使用MAT(MemoryAnalyzerTool,免费)
3.测试
3.1.程序(运行时)
public static void main(String[] args) throws InterruptedException {
Map<String,Object> memMap=new HashMap<>();
for (int i = 0; i <128 ; i++) {
byte [] b=new byte[1024*1024];
memMap.put("k"+i,b);
//模拟程序运行中
Thread.sleep(1000);
}
}
//启动参数: -Xmx128m -Xms128m
3.2.jmap生成内存快照文件
#1.获取java程序的pid,使用jps命令获取pid
jps
#2.使用jmap命令dump文件到指定路径:filepath:文件路径 xxx.hprof pid:java程序的pid
#示例:jmap -dump:live,format=b,file=./test.hprof 42156
jmap -dump:live,format=b,file=<filepath> <pid>
3.3.MAT分析
3.3.1.下载
路径:https://www.eclipse.org/mat/downloads.php
3.3.2.使用
1.打开文件
2.内存溢出的可能原因
3.java对象引用分析(树形)
上一篇: *Error
下一篇: 深入理解JVM(三)--对象存活判定算法
推荐阅读
-
Java/Android 大文件获取SHA1防止内存溢出
-
Tomcat同时部署多个应用——内存溢出(java.lang.OutOfMemoryError: PermGen space)的解决办法
-
ES内存溢出,报错:java.lang.OutOfMemoryError: Java heap space
-
java内存溢出(OutOfMemoryError)————dump文件以及内存分析
-
模拟实战排查堆内存溢出(java.lang.OutOfMemoryError: Java heap space)问题
-
java生产环境调优(2) 模拟一次内存溢出,以及原因分析
-
Java 堆内存溢出梗概分析
-
内存展开文件分析——Dump文件产生的头脑风暴
-
读写文件时内存溢出问题思考(OutOfMemoryError: Java heap space)
-
【赵强老师】如何分析Java的内存溢出问题