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

相关推荐
yuanbenshidiaos4 小时前
c++---------数据类型
java·jvm·c++
java1234_小锋7 小时前
JVM对象分配内存如何保证线程安全?
jvm
40岁的系统架构师11 小时前
1 JVM JDK JRE之间的区别以及使用字节码的好处
java·jvm·python
寻找沙漠的人11 小时前
理解JVM
java·jvm·java-ee
我叫啥都行11 小时前
计算机基础复习12.22
java·jvm·redis·后端·mysql
bufanjun00114 小时前
JUC并发工具---ThreadLocal
java·jvm·面试·并发·并发基础
ZHOUPUYU20 小时前
最新 neo4j 5.26版本下载安装配置步骤【附安装包】
java·后端·jdk·nosql·数据库开发·neo4j·图形数据库
东阳马生架构1 天前
JVM简介—1.Java内存区域
jvm
工程师老罗1 天前
Android笔试面试题AI答之SQLite(2)
android·jvm·sqlite
Qzer_4071 天前
jvm字节码中方法的结构
jvm