Trace跟踪和Java堆的参数配置
Java内存分配的参数
(功能、如何配、效果如何)
Trace跟踪参数:
- 可以打印 GC 的简要信息: -Xlog:gc (看Convert GC Logging Flags to Xlog)
- 打印 GC 的详细信息:-Xlog:gc*
- 指定 GC log 的位置,以文件输出:-Xlog:gc:garbage-collection.log
- 每一次GC后,都打印堆信息:-Xlog:gc+heap=debug
GC日志格式
GC发生的时间,也就是JVM从启动以来经过的秒数
日志级别信息,和日志类型标记
GC识别号
GC类型和说明GC的原因
容量:GC前容量 -> GC 后容量(该区域总容量)
GC持续时间,单位秒。有的收集器会有更详细的描述,比如:user表示应用程序消耗的时间,sys表示系统内核消耗的时间,real表示操作从开始到结束的时间。
Java堆的参数
Xms:初始堆大小,默认物理内存的1/64
Xmx:最大堆大小,默认是物理内存的1/4
xmn:新生代大小,默认是整个堆的3/8
-XX:+HeapDumpOnOutOfMemoryError: OOM时导出堆到文件
-XX:+HeapDumpPath: 导出OOM的路径
使用MAT进行内存分析
(安装MAT插件进行分析)
堆、栈、元空间的参数配置
-XX:NewRatio: 老年代与新生代的比值
如果xms=xmx,且设置了xmn的情况下,该参数不用设置
-XX:SurvivorRatio: Eden区和Survivor区的大小比值,设置位8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor占整个新生的1/10
-XX:+HeapDumpOnOutOfMemoryError: OOM时导出堆到文件
-XX:+HeapDumpPath: 导出OOM的路径
-XX:OnOutOfMemoryError: 在OOm时,执行一个脚本
Java栈的参数:
-Xss:通常只有几百K,决定了函数调用的深度
(出现StackOverflowError,有很大可能是出现递归没有终止条件)
元空间的参数:
-XX:MetaspaceSize: 初始空间大小
-XX:MaxMetaspaceSize: 最大空间,默认 是没有限制的
-XX:MinMetaspaceFreeRatio: 在GC之后,最小的Metaspace剩余空间容量的百分比
重点是Java堆内存参数(如何配置、现象和作用)