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

相关推荐
AAA 建材批发王哥(天道酬勤)42 分钟前
JVM 由多个模块组成,每个模块负责特定的功能
jvm
JavaNice哥7 小时前
1初识别jvm
jvm
涛粒子7 小时前
JVM垃圾回收详解
jvm
YUJIANYUE8 小时前
PHP将指定文件夹下多csv文件[即多表]导入到sqlite单文件
jvm·sqlite·php
逊嘘8 小时前
【Java语言】抽象类与接口
java·开发语言·jvm
鱼跃鹰飞17 小时前
大厂面试真题-简单说说线程池接到新任务之后的操作流程
java·jvm·面试
王佑辉18 小时前
【jvm】Major GC
jvm
阿维的博客日记18 小时前
jvm学习笔记-轻量级锁内存模型
jvm·cas·轻量级锁
曹申阳21 小时前
2. JVM的架构模型和生命周期
jvm·架构