JVM参数-XX:+HeapDumpOnOutOfMemoryError

一、日志相关参数

-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps 打印时间戳
-XX:+PrintGCDateStamps
-Xloggc:/tmp/gc.log  将GC日志输出到指定文件
-XX:PrintHeapAtGC 发生GC时,打印堆的使用情况
-XX:PrintTenuringDistribution 发生GC时,打印young区的年龄信息

1.这个jvm启动参数含义:当堆内存空间溢出时输出堆的内存快照。

2.配合参数: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/home/tomcat/logs/...

3、触发条件:java.lang.OutOfMemo-ryError: Java heap space

也就是说当发生OutOfMemoryError错误时,才能触发-XX:HeapDumpOnOutOfMemoryError 输出到-XX:HeapDumpPath指定位置。

4.关于fullgc:所以Systerm.gc() 以及fullgc 不会触发-XX:HeapDumpOnOutOfMemoryError

二、复现一下内存空间溢出

  • 创建一个spring boot程序。只要能够运行就可以。
  • 指定内存最大值为10M(-Xmx10M)。10M,肯定启动不了 spring boot ,肯定内存空间溢出。
  • eclipse中的执行结果:

另一个复现内存空间溢出的方法

编写一个内存泄漏的程序,漏的足够多时,就内存空间溢出了。

class Wrapper {
  public static void main(String args[]) throws Exception {
    Map map = System.getProperties();
    Random r = new Random();
    while (true) {
      map.put(r.nextInt(), "value");
    }
  }
}

添加参数 -XX:+HeapDumpOnOutOfMemoryError

在java命令行中添加vm参数-XX:+HeapDumpOnOutOfMemoryError。

eclipse中配置程序启动参数:

eclipse中的执行结果:

内存快照的生成目录,默认在java的启动目录下。

-XX:HeapDumpPath

-XX:HeapDumpPath=目录或文件

-XX:HeapDumpPath=目录时,参数表示生成DUMP文件的路径。默认为:java_heapDump.hprof。

-XX:HeapDumpPath=文件时,形如-XX:HeapDumpPath=d:\java_heapdump.hprof。

三、常用配置:

-XX:+HeapDumpOnOutOfMemoryError  -XX:+PrintGCDetails -XX:+PrintGCDateStamps -verbose:gc -XX:HeapDumpPath=d:\java_heapdump.hprof -Xloggc:/tmp/gc_`date +%Y%m%d_%H%M%S`.log"

JVM中配置以下参数,当发生OOM时,将自动导出应用程序的当前堆快照。

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=/opt/gc_`date +%Y%m%d_%H%M%S`.hprof

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值