一、日志相关参数
-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
796

被折叠的 条评论
为什么被折叠?



