Jvm G1与ZGC启动参数

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

参数解释

  1. 堆大小设置
bash 复制代码
-Xms4g -Xmx4g

设置初始堆和最大堆大小为 4G。

  1. G1 垃圾收集器
bash 复制代码
-XX:+UseG1GC

启用 G1 垃圾收集器。

  1. 最大 GC 暂停时间
bash 复制代码
-XX:MaxGCPauseMillis=200

目标是将最大 GC 暂停时间控制在 200 毫秒以内。

  1. 启动并发标记周期的堆占用率阈值
bash 复制代码
-XX:InitiatingHeapOccupancyPercent=45

当堆内存使用率达到 45% 时,启动并发标记周期。

  1. 堆区域大小
bash 复制代码
-XX:G1HeapRegionSize=16m

设置 G1 堆区域的大小为 16M。这个值应该是 2 的幂次方,范围在 1M 到 32M 之间。

  1. 并发 GC 线程和并行 GC 线程
bash 复制代码
-XX:ConcGCThreads=2 -XX:ParallelGCThreads=4

设置并发 GC 线程数和并行 GC 线程数。

  1. 元空间设置
bash 复制代码
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m

设置元空间的初始大小和最大大小。

  1. 并行引用处理
bash 复制代码
-XX:+ParallelRefProcEnabled

启用并行引用处理,减少垃圾回收暂停时间。

  1. 内存不足时生成堆转储
bash 复制代码
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heapdumps

内存不足时生成堆转储,并指定堆转储文件的路径。

  1. 垃圾回收日志
bash 复制代码
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintAdaptiveSizePolicy -Xlog:gc*:file=/path/to/gc.log:time,level,tags

启用详细的垃圾回收日志记录,并将日志输出到指定文件。

  1. 垃圾回收日志文件轮转
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: 安全点相关的日志。

注意事项

  1. 堆大小:根据你的应用需求和可用内存调整 -Xms 和 -Xmx 参数。
  2. 日志路径:确保指定的日志文件路径存在且有写权限。
  3. JMX 配置:在生产环境中启用 JMX 认证和 SSL,以确保安全性。

�通过这些参数配置,你可以优化 ZGC 的性能,并获取详细的 GC 和内存分配日志,以便更好地监控和调优 JVM 的内存管理。

相关推荐
代码栈上的思考6 小时前
JVM中内存管理的策略
java·jvm
thginWalker9 小时前
深入浅出 Java 虚拟机之进阶部分
jvm
沐浴露z9 小时前
【JVM】详解 线程与协程
java·jvm
thginWalker11 小时前
深入浅出 Java 虚拟机之实战部分
jvm
程序员卷卷狗2 天前
JVM 调优实战:从线上问题复盘到精细化内存治理
java·开发语言·jvm
Sincerelyplz2 天前
【JDK新特性】分代ZGC到底做了哪些优化?
java·jvm·后端
初学小白...3 天前
线程同步机制及三大不安全案例
java·开发语言·jvm
凤山老林3 天前
还在用JDK8?JDK8升级JDK11:一次价值千万的升级指南
java·开发语言·jvm·spring boot·后端·jdk
2501_938790073 天前
详解 JVM 中的对象创建过程:类加载检查、内存分配、初始化的完整流程
jvm
宸津-代码粉碎机3 天前
Java内部类内存泄露深度解析:原理、场景与根治方案(附GC引用链分析)
java·开发语言·jvm·人工智能·python