G1GC
G1GC 启动参数示例
bash
-XX:+UseG1GC
-Xms4g
-Xmx4g
-XX:MaxGCPauseMillis=200
-XX:InitiatingHeapOccupancyPercent=45
-XX:G1HeapRegionSize=16m
-XX:ConcGCThreads=2
-XX:ParallelGCThreads=4
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=512m
-XX:+ParallelRefProcEnabled
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/Users/xuechenxi/gallant/heapdumps
-XX:+PrintGCDetails
-verbose:gc
-XX:+UseAdaptiveSizePolicy
-Xlog:gc*:file=/Users/xuechenxi/gallant/gc.log:time,level,tags
-XX:+UnlockDiagnosticVMOptions
-XX:+PrintFlagsFinal
参数解释
- 堆大小设置
bash
-Xms4g -Xmx4g
设置初始堆和最大堆大小为 4G。
- G1 垃圾收集器
bash
-XX:+UseG1GC
启用 G1 垃圾收集器。
- 最大 GC 暂停时间
bash
-XX:MaxGCPauseMillis=200
目标是将最大 GC 暂停时间控制在 200 毫秒以内。
- 启动并发标记周期的堆占用率阈值
bash
-XX:InitiatingHeapOccupancyPercent=45
当堆内存使用率达到 45% 时,启动并发标记周期。
- 堆区域大小
bash
-XX:G1HeapRegionSize=16m
设置 G1 堆区域的大小为 16M。这个值应该是 2 的幂次方,范围在 1M 到 32M 之间。
- 并发 GC 线程和并行 GC 线程
bash
-XX:ConcGCThreads=2 -XX:ParallelGCThreads=4
设置并发 GC 线程数和并行 GC 线程数。
- 元空间设置
bash
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
设置元空间的初始大小和最大大小。
- 并行引用处理
bash
-XX:+ParallelRefProcEnabled
启用并行引用处理,减少垃圾回收暂停时间。
- 内存不足时生成堆转储
bash
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heapdumps
内存不足时生成堆转储,并指定堆转储文件的路径。
- 垃圾回收日志
bash
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintAdaptiveSizePolicy -Xlog:gc*:file=/path/to/gc.log:time,level,tags
启用详细的垃圾回收日志记录,并将日志输出到指定文件。
- 垃圾回收日志文件轮转
bash
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=20M
启用垃圾回收日志文件轮转,最多保留 10 个日志文件,每个文件大小为 20M。
这些参数是一个初始的优化建议,你可以根据实际应用的性能表现进行进一步的调整
ZGC
关键参数
- -XX:+UseZGC:启用 ZGC。
- -Xms32g -Xmx32g:设置初始堆大小和最大堆大小为 32 GB。
- -XX:SoftMaxHeapSize=28g:设置软最大堆大小。
- -XX:+UnlockExperimentalVMOptions:解锁实验性 JVM 选项。
- -XX:+ZGenerational:启用 ZGC 的世代模式。
- -XX:ZCollectionInterval=10:设置两次垃圾回收之间的最短间隔时间。
- -XX:ZAllocationSpikeTolerance=5.0:设置 ZGC 对内存分配峰值的容忍度。
- -Xlog:gc*:file=/path/to/gc.log:time,level,tags:启用 GC 日志并输出到指定文件。
- -Xlog:alloc*:file=/path/to/allocation.log:time,level,tags:启用分配日志并输出到指定文件(可选)。
- -XX:+UseStringDeduplication:启用字符串去重。
- -XX:+HeapDumpOnOutOfMemoryError:在发生 OOM 时生成堆转储。
- -XX:HeapDumpPath=/path/to/heapdump:指定堆转储文件的保存路径。
- -XX:+CrashOnOutOfMemoryError:在发生 OOM 时崩溃并生成错误报告。
- -XX:ErrorFile=/path/to/hs_err_pid%p.log:指定错误报告文件的保存路径。
- -XX:+UnlockDiagnosticVMOptions:解锁诊断性的 JVM 选项(仅调试时使用)。
- -XX:+PrintFlagsFinal:打印所有 JVM 选项及其最终值(仅调试时使用)。
- -Dcom.sun.management.jmxremote:启用 JMX 远程监控。
- -Dcom.sun.management.jmxremote.port=9010:指定 JMX 远程监控端口。
- -Dcom.sun.management.jmxremote.authenticate=false:禁用 JMX 远程监控认证(生产环境建议启用认证)。
- -Dcom.sun.management.jmxremote.ssl=false:禁用 JMX 远程监控 SSL(生产环境建议启用 SSL)。
- -jar your-application.jar:启动应用程序。
常见日志标签
- gc: 垃圾收集相关的日志。
- alloc: 内存分配相关的日志。
- class: 类加载相关的日志。
- os: 操作系统相关的日志。
- safepoint: 安全点相关的日志。
注意事项
- 堆大小:根据你的应用需求和可用内存调整 -Xms 和 -Xmx 参数。
- 日志路径:确保指定的日志文件路径存在且有写权限。
- JMX 配置:在生产环境中启用 JMX 认证和 SSL,以确保安全性。
�通过这些参数配置,你可以优化 ZGC 的性能,并获取详细的 GC 和内存分配日志,以便更好地监控和调优 JVM 的内存管理。