参数配置 | 说明 |
---|---|
-XX:+PrintGC | 简单GC日志,JDK8后过期,后续会被移除,新版采用 -Xlog:gc |
-XX:+PrintGCDetails | GC详细日志,JDK8后过期,后续会被移除,新版采用-Xlog:gc* |
-Xloggc:gc.log | 输出GC日志到文件 ,可以指定绝对的路径,JDK8后过期,后续会被移除,
新版采用-Xlog:gc: |
-verbose:gc | 标准的选项,输出GC日志 |
/**
* 模拟OOM测试
* @author lixiang
* @date 2023/5/4 20:53
*/
public class JVMTest {
public static void main(String[] args) throws InterruptedException {
List<Object> objects = new ArrayList<>();
while(true){
objects.add(new Object());
}
}
}
-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xms524m -Xmx524m -XX:+PrintCommandLineFlags -Xlog:gc:gc.log
-Xlog:[selectors]:[output]:[decorators][:output-options]
gc
和 gc+metaspace
这两类 tag 的日志 -Xlog:gc=debug,gc+metaspace:gc.log
-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xms524m -Xmx524m -XX:+PrintCommandLineFlags -Xlog:gc=debug,gc+metaspace:gc.log
*
来解决精确匹配的问题,比如想要所有 tag 为 gc 的debug级别日志 -Xlog:gc*=debug
-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xms524m -Xmx524m -XX:+PrintCommandLineFlags -Xlog:gc*=debug:gc.log
-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xms524m -Xmx524m -XX:+PrintCommandLineFlags -Xlog:gc=info:gc.log
日志内容
[24.575s][info][gc] GC(0) Pause Young (Concurrent Start) (G1 Humongous Allocation) 240M->238M(528M) 5.888ms
字段拆解
[24.575s]:GC发生的时间戳,表示程序运行的时间
[info]:日志级别,表示这是一条信息级别的日志
[gc]:日志标签,表示这是一条GC相关的日志
GC(0):GC的编号,表示这是第一次GC
Pause Young (Concurrent Start) (G1 Humongous Allocation):
GC的类型,表示这是一次Young GC,同时也是一次 Humongous Allocation的GC,其中Concurrent Start表示并发启动的GC。
240M->238M(528M):
GC前后堆内存的使用情况,其中240M表示GC前的已使用内存,238M表示GC后的已使用内存,528M表示堆内存的总大小
5.888ms:GC的耗时,表示这次GC的执行时间
这条GC日志记录了程序运行了24.575秒时发生的一次Young GC,回收了2M的内存空间,耗时5.888毫秒
————————————————————————————————————————————————————————
日志内容
[24.783s][info][gc] GC(3) Concurrent Cycle
[24.784s][info][gc] GC(3) Pause Remark 242M->242M(528M) 0.383ms
[24.784s][info][gc] GC(3) Pause Cleanup 242M->242M(528M) 0.066ms
[24.785s][info][gc] GC(3) Concurrent Cycle 2.374ms
字段拆解
[24.783s][info][gc] GC(3) Concurrent Cycle:
Mixed GC的相关信息,表示这是一次Mixed GC的开始。
[24.784s][info][gc] GC(3) Pause Remark 242M->242M(528M) 0.383ms
Mixed GC的相关信息,表示这是一次Remark阶段的GC,回收了0M的内存空间,耗时0.383毫秒。
[24.784s][info][gc] GC(3) Pause Cleanup 242M->242M(528M) 0.066ms:
Mixed GC的相关信息,表示这是一次Cleanup阶段的GC,回收了0M的内存空间,耗时0.066毫秒。
[24.785s][info][gc] GC(3) Concurrent Cycle 2.374ms:
Mixed GC的相关信息,表示这是一次Mixed GC的结束,耗时2.374毫秒。
这段GC日志记录了程序运行了24.783秒一次Mixed GC,Mixed GC回收了0M的内存空间,耗时2.374毫秒
-Xlog:gc=info:file=/path/app.log
-Xlog:gc=info:file=/path/app.log:filesize=104857600,filecount=5
* `filesize=104857600`:指定单个日志文件大小为100MB,超过这个大小会自动切换到新的日志文件。
* `filecount=5`:指定日志文件数量不超过5个,超过这个数量会删除最早的日志文件。配置实操
-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xms524m -Xmx524m -XX:+PrintCommandLineFlags -Xlog:gc*=info:file=portal_gc.log:utctime,level,tags:filecount=5,filesize=1M
-XX:+UseG1GC:使用G1垃圾回收器
-XX:MaxGCPauseMillis=100:设置最大垃圾回收暂停时间为100毫秒
-Xms524m:设置JVM堆的初始大小为524MB
-Xmx524m:设置JVM堆的最大大小为524MB
-XX:+PrintCommandLineFlags:打印JVM启动参数
-Xlog:gc*=info:file=portal_gc.log:utctime,level,tags:filecount=5,filesize=1M:
Xlog:指定日志输出方式为日志文件。
gc*:指定日志输出类型为GC相关的日志。
info:指定输出日志的级别为info级别。
file=portal_gc.log:指定日志输出的文件名为portal_gc.log。
utctime:指定日志输出的时间戳使用UTC时间。
level,tags:指定日志输出的格式包含级别和标签信息。
filecount=5:指定最多保存5个日志文件。
filesize=1M:指定每个日志文件的大小为1MB。
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof
-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xms524m -Xmx524m -XX:+PrintCommandLineFlags -Xlog:gc*=info:file=portal_gc.log:utctime,level,tags:filecount=5,filesize=1M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof
heapdump.hprof
文件可以使用多种工具进行分析-server
-Xms8g
-Xmx8g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:G1HeapRegionSize=32M
-XX:ActiveProcessorCount=8
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=heapdump.hprof
-XX:+PrintCommandLineFlags
-Xlog:gc*=info:file=portal_gc.log:utctime,level,tags:filecount=50,filesize=100M
参数说明
-Xms8g:指定JVM堆内存最小值为8G。
-Xmx8g:指定JVM堆内存最大值为8G。
-XX:+UseG1GC:指定使用G1垃圾收集器。
-XX:MaxGCPauseMillis=200:指定最大垃圾回收暂停时间为200毫秒。
-XX:G1HeapRegionSize=32M:指定G1垃圾收集器的堆区域大小为32MB。
-XX:ActiveProcessorCount=8:指定并行垃圾回收器的线程数为8,在JDK 9及之后的版本中,ParallelGCThreads参数已被替代为-XX:ActiveProcessorCount参数,用于自动计算并行垃圾回收线程数
-server:指定JVM使用服务器模式运行,优化性能。
-XX:+HeapDumpOnOutOfMemoryError:指定在发生内存溢出时生成堆转储文件。
-XX:HeapDumpPath=/var/log/heapdump.hprof:指定堆转储文件的路径。
-Xlog:gc*=info:file=portal_gc.log:utctime,level,tags:filecount=50,filesize=100M:指定GC日志的输出格式和位置,记录GC相关信息。
-XX:+PrintCommandLineFlags:打印JVM启动时的命令行参数,可以去除
方便测试OOM,可以调整 -Xms524m -Xmx524m
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。