服务器芯片由X86迁移到ARM过程中产生的问题:JDK参数默认值变化导致jvm内存占用超限的隐患

服务器芯片由X86迁移到ARM过程中产生的问题:JDK参数默认值变化导致jvm内存占用超限的隐患

隐患概述

服务器芯片由X86迁移到ARM过程中产生的问题:JDK参数默认值变化导致jvm内存占用超限的隐患

隐患案例

某系统因微服务java内存占用超过POD上限,被k8s监控到并杀死。

隐患说明

在国产化迁移过程中,因为国产化和非国产化打包使用的基础镜像不同(x86 vs arm),这两个版本的jdk对该参数的控制和默认值处理有差异,因此导致国产化迁移后会产生-XX:MaxDirectMemorySize参数默认值变化,同时在其他基础镜像发生变化的场景也会产生该问题。

一个java进程可以使用的内存,由heap buffer和direct buffer两部分组成,heap大小(能分配的空间的限额)由-Xmx参数决定,direct buffer大小(能分配的空间的限额)由-XX:MaxDirectMemorySize参数决定,在新的arm镜像中不设置则默认值是-Xmx对应的值。结合发生故障的服务的实际参数:POD申请内存上限为48G,-Xmx设置为42G,-XX:MaxDirectMemorySize未设置,这样意味着java进程最多可能用到42*2=84G内存,会超过POD的48G上限,因此被K8S监测到并杀死,从而导致故障。

防范建议

  1. 检查已完成国产化迁移的微服务参数配置,并按需整改。

  2. 国产化迁移时根据容器的限额,设置 -XX:MaxDirectMemorySize 参数,同时梳理和调整所有微服务的相关参数。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值