使用zgc导致linux平台下top命令显示内存占用超过100%
·
背景
手头有一个流式计算项目,特点是高吞吐且对延时敏感,heap大小在50G左右,原先使用的G1GC在高峰期的gc时间长达30s以上,对下游业务造成了干扰。
经过多次调优,仍然不理想,因此尝试使用JDK11的ZGC优化performance。经过初步试运行,ZGC在同样吞吐量的情况下,能够有效缩减STW时间,提升效率。
但运行中发现一个问题,当我们使用top命令查看程序运行情况时,发现如下的现象,程序占用的%MEM超过了100。

原因
由于程序运行正常,操作系统也没有运行其它程序,因此我们猜测可能是ZGC相关的特性导致了这一反常现象的出现。
通过搜索,找到如下解释:
https://stackoverflow.com/questions/57899020/zgc-max-heap-size-exceed-physical-memory
https://stackoverflow.com/questions/62926652/the-java-zgc-garbage-collector-uses-a-lot-of-memory
简单来说,zgc采用了指针染色技术以提升gc效率,对于堆内存有三种view("marked0", "marked1", "remapped"),因此使用top查看的内存大小约为jvm堆大小的3倍。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)