专栏首页后端码事Java 11 新垃圾回收器 ZGC

Java 11 新垃圾回收器 ZGC

可伸缩、低延迟的垃圾回收器

GC 暂停时间不超过 10ms

堆管理容量范围(小M级别,大到T级别)

对应用吞吐量影响不超过15%(对比 G1)

为进一步的添加新特性和优化做基础

默认支持 Linux/x64 系统

一、 启用Linux Large Pages

ZGC 启用Large Pages 是一种对应用高性能的折中(吞吐量、低延迟及启动时间),但是却不会带来明显的弊端。除了在应用启动上需要稍微复杂的配置,所需要的系统相关root权限需要手动进行配置。

Linux Large 在x86 linux平台也称为 huge pages,页大小为2M。

假设需要16G大小的JAVA 堆,则意味着需要 16G / 2M = 8192 huge pages。

首先需要分配至少16G(8192 huge pages)内存到 huge pages 内存池。 之所以说至少,是因为如果 JVM 启用了的 huge pages,那么不仅仅是GC,同时也包括JVM 的其它功能部分也会用到这部分内存(code heap, marking bitmaps 等),因此在此我们分配 9216 pages (18G),保持有2G的额外内存供非堆分配使用。

1. 配置系统的 huge pages 内存池:

$ echo 9216 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

附注:系统在没有足够内存的情境下会导致这一命令执行失败;命令执行完成需要一定的时间,可以通过以下命令进行查看:

$ cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

9216

2. 挂载 hugetlbfs 文件系统,并分配JVM运行用户权限:

$ mkdir /hugepages

$ mount -t hugetlbfs -o uid=123 nodev /hugepages

附注:对于内核大于等于4.4的linux系统,可以跳过此步骤。

3. JVM启动命令添加 -XX:+UseLargePages 配置:

$ java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xms16G -Xmx16G -XX:+UseLargePages ...

4. 如果挂载了多个 hugetlbfs 文件系统,则需要通过 -XX:ZPath 命令指定需要使用的 hugetlbfs 系统:

$ java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xms16G -Xmx16G -XX:+UseLargePages -XX:ZPath=/hugepages ...

附注:huge pages 内存池分配及 hugetlbfs 文件系统挂载是非持久化的,会因系统重启而丢失,因此需要用户一定的措施来处理此种情景。

二、启用 Transparent Huge Pages

... ...

三、启用 NUMA

ZGC默认支持 NUMA,会优先在NUMA-local 内存进行 JAVA 堆内存分配,但是在有CPU亲和性设置的情况下,JVM会自动禁用NUMA,如果需要显示的设置NUMA支持,可以通过配置以下选项:-XX:+UseNUMA or -XX:-UseNUMA。

对于运行在 NUMA 机器的 JVM ,启用NUMA,能够在性能上的到显著的提升。

四、启用 GC 日志

启用命令:

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

帮助信息:

-Xlog:help

基本日志:

-Xlog:gc:gc.log

性能调试:

-Xlog:gc*:gc.log

gc* 代表所有有gc标志的日志。:gc.logd代表日志写入gc.log文件。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关于redis内存分析,内存优化

    可以看到,当前节点内存碎片率为226893824/209522728≈1.08,使用的内存分配器是jemalloc。

    WindWant
  • jvm之GC知识点

    WindWant
  • JVM之Parallel Scavenge收集器

    WindWant
  • JVM 监控,调优,调试

    Java的安装包自带了很多优秀的工具,善用这些工具对于监控和调试Java程序非常有帮助。常用工具如下:

    大道七哥
  • 【Tomcat】Tomcat配置JVM参数步骤

    这里向大家描述一下如何使用Tomcat配置JVM参数,Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机。您可以选择自...

    拓荒者
  • 虚拟机11.JVM调优_调优方法

    虚拟机11.JVM调优_调优方法 ENTER TITLE JVM调优工具 Jconsole,jProfile,VisualVM Jconsole : jdk自...

    Java帮帮
  • Spring Boot & Spring Cloud 应用内存管理

    Memory Management 在整体应用架构中,非生产环境情况下,一般 1GB 或者 2GB 的 RAM 就足够了。如果我们将这个应用程序划分为 20 或...

    程序猿DD
  • 怎样扩大电脑内存 电脑扩大内存方法【图文】

    电脑是我们日常生活中的好帮手,电脑的内存可以说是衡量一台电脑性能的重要标准之一。电脑的内存其实是和我们使用时的许多方面都有所关联的,如今的电脑内存都十分的大了,...

    用户5258796
  • 记一次服务cpu爆高异常

    版权声明:本文为博主原创文章,未经博主允许不得转载。 ...

    林老师带你学编程
  • JVM常用调优工具介绍

    王子在之前的JVM文章中已经大体上把一些原理性问题说清楚了,今天主要是介绍一些实际进行JVM调优工作的工具和命令,不会深入讲解,因为网上资料很多,篇幅可能不长,...

    HUC思梦

扫码关注云+社区

领取腾讯云代金券