ZGC-可伸缩低延时JVM GC工具

简介

官方wiki地址https://wiki.openjdk.java.net/display/zgc

ZGC是JDK11开始出现(Linux版是jdk11,Windows版是jdk14),它是可伸缩低延时的新GC设计方案,它的目标:

  • GC最大暂停时间毫秒级。
  • GC暂停时间不会随着堆或活动集大小的增加而增加。
  • 可处理堆的大小从8MB到16 TB之间。

启用ZGC

基本用法:

-XX:+UseZGC -Xmx<size> -Xlog:gc

想要显示更多的日志:

-XX:+UseZGC -Xmx<size> -Xlog:gc*

在JDK15之前的版本中,使用ZGC还必须添加参数 -XX:+UnlockExperimentalVMOptions 在-XX:+UseZGC之前。JDK15中,ZGC已经是准生产的功能,就不用加这个参数。

 

ZGC可用的JVM参数列表:

General GC Options
ZGC Options
ZGC Diagnostic Options (-XX:+UnlockDiagnosticVMOptions)
-XX:MinHeapSize, -Xms
-XX:InitialHeapSize, -Xms
-XX:MaxHeapSize, -Xmx
-XX:SoftMaxHeapSize
-XX:ConcGCThreads
-XX:ParallelGCThreads
-XX:UseLargePages
-XX:UseTransparentHugePages
-XX:UseNUMA
-XX:SoftRefLRUPolicyMSPerMB
-XX:AllocateHeapAt
-XX:ZAllocationSpikeTolerance

-XX:ZCollectionInterval

-XX:ZFragmentationLimit

-XX:ZMarkStackSpaceLimit

-XX:ZProactive

-XX:ZUncommit

-XX:ZUncommitDelay

-XX:ZStatisticsInterval

-XX:ZVerifyForwarding

-XX:ZVerifyMarking

-XX:ZVerifyObjects

-XX:ZVerifyRoots

-XX:ZVerifyViews

配置ZGC

设置堆大小

ZGC最重要的优化选项是设置最大堆大小(-XMX<size>)。由于ZGC是一个并发收集器,所以必须选择最大堆大小,以便:1)堆可以容纳应用程序的活动集;2)堆中有足够的空间允许在GC运行时为分配服务。

需要多少空间取决于应用程序的分配率和活动设置大小。一般来说,给ZGC的内存越多越好。但是,同时,浪费内存是不可取的,所以这都是为了在内存使用和GC需要运行的频率之间找到一个平衡。

设置并发GC线程数

第二个调优选项是设置并发GC线程的数量(-XX:ConcGCThread=<number>)。ZGC有自动选择这个数字的启发式方法。这种启发式通常很好,但根据应用程序的特点,可能需要调整。

这个选项本质上决定了GC应该给予多少CPU时间。给它太多,GC将占用太多的CPU时间。使用它太少,应用程序分配垃圾的速度可能比GC收集垃圾的速度要快。

通常,如果低延迟(即低应用程序响应时间)对您的应用程序很重要,那么永远不要过多地提供您的系统资源。理想情况下,系统的CPU利用率不应超过70%。

返回未使用的内存到操作系统

默认情况下,ZGC取消提交未使用的内存,并将其返回到操作系统。这对于内存占用问题的应用程序和环境非常有用。可以使用-XX:-ZUnCOMMIT禁用此功能。此外,内存不会被取消提交,这样堆大小就会缩小到最小堆大小(-XMS)以下。这意味着,如果最小堆大小(-XMS)配置为等于最大堆大小(-XMX),则此特性将被隐式禁用。

可以使用-XX:ZUnconnectionDelay=<sec>(默认为300秒)配置取消提交延迟。此延迟指定在符合取消提交条件之前,应该使用多久的内存。

注意:在Linux上,不提交未使用的内存需要FALLOC_FL_CHINK_HOME支持的FALLOC(2),这首先出现在内核版本3.5(对于tmpfs)和4.3(对于hugetlbfs)中。

在Linux上启用大内存页

具体参看官方文档

开启GC日志

开启GC日志的命令行参数:

-Xlog:<tag set>,[<tag set>, …]:<log file>

开启基本的日志:

-Xlog:gc:gc.log

开启可供性能分析的日志:

-Xlog:gc*:gc.log

查看日志的帮助手册:

-Xlog:help

 


发表评论

电子邮件地址不会被公开。 必填项已用*标注