java内存溢出(OutOfMemoryError)————dump文件以及内存分析

1 篇文章 0 订阅
1 篇文章 0 订阅

java内存溢出(OutOfMemoryError)————dump文件以及内存分析


当程序出现以下错误时:

  1. java.lang.OutOfMemoryError: Java heap space
  2. java.lang.OutOfMemoryError: Java metaspace
  3. 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.分析快照文件

  1. 使用Jprofiler(收费,功能强大)
  2. 使用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对象引用分析(树形)

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值