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 的内存管理。

相关推荐
秋夫人4 小时前
jvm G1 垃圾收集日志分析示例(GC)
jvm
天天向上杰4 小时前
简识JVM的栈帧优化共享技术
java·jvm
讓丄帝愛伱7 小时前
不重启JVM,替换掉已经加载的类
jvm
qq_312738457 小时前
jvm学习总结
jvm·学习
天天向上杰7 小时前
简识JVM栈中的程序计数器
jvm
大乔乔布斯7 小时前
JRE、JVM 和 JDK 的区别
java·开发语言·jvm
天天向上杰8 小时前
简识JVM栈帧中的局部变量表
jvm
小白的一叶扁舟1 天前
深入剖析 JVM 内存模型
java·jvm·spring boot·架构
小池先生1 天前
jvm_threads_live_threads 和 jvm_threads_states_threads 这两个指标之间存在一定的关系,但它们关注的维度不同
jvm
{⌐■_■}1 天前
【GORM】事务,嵌套事务,保存点事务的使用,简单电商平台go案例
开发语言·jvm·后端·mysql·golang