JDK17 使用 ZGC 三倍内存问题怎么解决?

2023-01-16 14:25:19 +08:00
 karottc

RT

目前使用 Java17 ,使用 ZGC ,通过 TOP 命令看到的 Java 进程占用内存会是实际使用内存的三倍。这种情况虽然不影响程序的实际运行,但是对监控运维很有影响,并且由于这种情况,以前一个机器能跑三个 Java 程序的,现在只能跑一个了。

关于为啥会占用三倍的问题,是由于 ZGC 内存映射实现导致的,可以看下这两个: https://www.zhihu.com/question/356585590/answer/1654398037

https://stackoverflow.com/questions/57899020/zgc-max-heap-size-exceed-physical-memory

ZGC 的官方说明是 8M -> 16T 的堆都可以使用 ZGC

Handle heaps ranging from a 8MB to 16TB in size

https://wiki.openjdk.org/display/zgc/Main

这本范围说明,基本任何情况都可以使用 ZGC ,并不存在只有大堆使用。

但是如果内存三倍问题不解决的话,还是没法用的。

这个问题,大家有什么解决办法?

2406 次点击
所在节点    Java
12 条回复
cubecube
2023-01-16 14:28:11 +08:00
RSS 也不影响啥
julyclyde
2023-01-16 14:28:19 +08:00
监控指标选的 VSS ?是不是应该选 RSS ?
hyperdak288
2023-01-16 14:30:23 +08:00
看完你给的资料,里面有人提到的点是 3 倍内存是虚拟内存,其实不影响真正的内存?
dqzcwxb
2023-01-16 14:31:58 +08:00
这是之前类似的帖子:https://www.v2ex.com/t/868984
目前我也没找到更好的方案,如果无法忍受这个问题那就换成 G1 或者 Shenandoah 吧
karottc
2023-01-16 14:33:24 +08:00
@cubecube @julyclyde @hyperdak288

虚拟内存三倍,物理内存还是实际的,跑起来实际不影响,但是影响 ECS 的监控,会报警,而且 TOP 命令看进程的时候,%mem 占用也是三倍,不是实际的。
c0t
2023-01-16 14:34:44 +08:00
虚拟内存有关系吗….我司的自有游戏引擎经常占用 1T 的虚拟空间地址,用于 ecs 系统
karottc
2023-01-16 14:35:20 +08:00
@dqzcwxb 嗯。 我也看到这个帖子,但是这个讲的是 IDEA ,桌面端用啥感觉影响不大。

我也在考虑要不要用回 G1
hyperdak288
2023-01-16 14:39:08 +08:00
可以试试 shenandoah.

https://learn.microsoft.com/en-us/azure/developer/java/containers/overview 这里有 azure 给的建议

ZGC <1 ms, shenandoah <10ms ,jdk11 即可用,有部分发行版带 shenandoah.
hyperdak288
2023-01-16 14:42:33 +08:00
可观测性拿到的都是三倍,这样就是可观测性方面的错误啊- -
后续有相关的修正才能方便用一些,可观测性那边针对这个 case 来 fix 的成本太高了
julyclyde
2023-01-16 15:22:47 +08:00
@karottc %mem 这个是后来计算出来的结果啊。如果你选的原始值就不对,除出来自然也不对
dqzcwxb
320 天前
好消息来了
https://openjdk.org/jeps/439 jdk21 zgc 将使用分代策略并取消多重映射
Generational ZGC from non-generational ZGC, and from other garbage collectors:
No multi-mapped memory
Optimized barriers
Double-buffered remembered sets
Relocations without additional heap memory
Dense heap regions
Large objects
Full garbage collections
karottc
315 天前
@dqzcwxb 等出来了测试下效果

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/909265

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX