配置动态内存优化

在容器服务K8s集群或Serverless K8s集群中创建或部署应用时,您可以根据应用内存占用率水位,一键开启动态内存优化来提升应用的堆内存占用率。合理地使用动态内存优化,不仅能提升单应用的内存利用率,还可以提升容器服务K8s集群中单节点部署的单位副本数和降低Serverless K8s集群中副本的资源使用成本。本文介绍如何开启动态内存优化。

配置指南

动态内存优化功能所需配置。

依赖条件

推荐配置

异常处理策略

JDK版本

支持的JDK版本:Dragonwell_11_ElasticHeap

未开启时,切换成支持列表以外JDK版本,将无法开启。

开启后切换成支持列表以外的JDK版本,将自动关闭。

GC回收策略

支持的回收策略:G1

未开启时,切换成支持列表以外GC回收策略或不设置GC策略,将无法开启。

开启后切换成支持列表以外的GC回收策略或不设置GC策略,将自动关闭。

JVM监控指标

开启Arms应用监控

若未开启,无法展示堆内存占用率、JVM内存趋势等指标,动态内存优化功能不受影响。

Pods监控指标

开启Prometheus监控

若未开启,无法展示堆内存占用率、Pod使用内存趋势指标,动态内存优化功能不受影响。

最大堆内存

已设置最大堆内存

未设置Xmx,无法开启。

初始堆内存

小于最大堆内存设置

不符合,EDAS将按照一定算法优化应用Xms配置,详情请参见默认参数优化

创建应用时开启动态内存优化

  1. 登录EDAS控制台

  2. 在左侧导航栏,单击应用管理 > 应用列表,在顶部菜单栏选择地域,并在页面上方选择微服务空间,然后在应用列表页面左上角,单击创建应用

  3. 应用基本信息页签选择集群类型应用运行环境

    参数

    描述

    集群类型

    选择Kubernetes集群

    应用运行环境

    选择Java应用类型再选择部署方式。

    Java:支持通用的JAR包部署,适用于Dubbo和Spring Boot应用。在选择后可更改Java环境。

    Tomcat:支持通用的WAR包部署,适用于Dubbo和Spring应用。在选择后可更改Java环境和容器版本。

    Java环境

    选择支持的Java环境:

    Dragonwell_11_ElasticHeap

监控及治理方案选择一体化方案(默认),然后在页面最下方单击下一步

  1. 应用配置页签,设置应用的环境信息,基本信息,部署方式和资源参数,设置完成后单击下一步

  1. 应用高级设置页签展开Java启动参数配置,配置初始堆内存,最大堆内存,GC回收策略为G1,配置完成后即可开启动态堆内存优化功能。

  1. 展开动态堆内存优化标签栏,开启或关闭动态内存优化功能。

更新应用时配置动态内存优化

  1. 登录EDAS控制台

  2. 在左侧导航栏,单击应用管理 > 应用列表,在顶部菜单栏选择地域并在页面上方选择所属微服务空间,在集群类型下拉列表,选择K8s集群,然后在页面单击具体的应用名称。

  3. 应用总览基本信息页面的右上角,选择部署 > 部署

  4. 选择部署模式页面,选择具体的部署方式,然后在所选方式区域的右上角,单击开始部署

  5. 在部署设置页面,设置应用运行环境,设置Java环境为Dragonwell_11_ElasticHeap,设置部署包信息后展开Java启动参数配置,为应用设置Java启动参数的初始堆内存,最大堆内存,GC回收策略为G1,单击确定后会显示出动态内存优化标签栏。

  6. 展开动态堆内存优化标签栏,可显示出动态内存优化详情。

动态内存优化指标图表说明

指标说明

动态内存优化开启时,EDAS会根据应用最近15分钟的内存使用情况,计算应用当前的内存占用率指标。公式如下:

  • 最近15分钟堆内存占用率 = 最近15分钟堆内存用量平均值/最近15分钟应用Pod使用内存平均值

  • 最近15分钟堆内存用量平均值 = Avg(最近15分钟的Jvm堆用量,1分钟1个点)

  • 最近15分钟应用Pod使用内存平均值 =Avg(最近15分钟的应用Pod使用量最大值,步长1分钟)

图表说明

动态内存优化会展示应用的内存设置及最近7天的内存变化曲线,以便观测应用在开启或关闭后的堆内存变化,图表中涉及的3个主要指标说明如下:

  • Pod已使用内存Pod最近7天内存数据,按天取点数据来源Prometheus。

  • Jvm堆应用堆内存最近7天内数据,按天取点数据来源:Arms应用监控

  • Jvm老年代应用堆中老年代最近7天内数据,按天取点数据来源:Arms应用监控

动态内存优化参数适配

默认参数优化

  • 如果应用设置了Xmx,但未设置Xms,在开启动态内存优化之后,EDAS会将Xms设置为128 MB。

  • 如果应用设置了Xmx,且Xms的值等于Xmx的值,在开启动态内存优化之后,EDAS会将Xms设置为128 MB。

  • 在开启动态内存优化之后,EDAS会为使用了G1垃圾回收策略的应用,追加参数-XX:G1PeriodicGCInterval=60000来调整JVM的收集策略。

自定义参数优化

开启动态内存优化后,EDAS会为应用自动返回部分内存给操作系统。返还给操作系统后,其他进程可以使用这部分内存,若使用过程中想为应用预留更多内存,可以通过以下参数设置和调整。

参数

参数说明

使用方法

MaxHeapFreeRatio

MaxHeapFreeRatio用于控制堆内存空闲部分所允许的最大百分比,在常见的HotSpot JDK版本中,如8、11、17中,默认值是70%,详情请参见JDK官方文档

JAVA启动参数自定义配置,请参见配置Java启动参数

示例值:-XX:MaxHeapFreeRatio=80%

MinHeapFreeRatio

MinHeapFreeRatio用于控制堆内存空闲部分所允许的最小百分比,在常见的HotSpot JDK版本中,如8、11、17中,默认值是40%,详情请参见JDK官方文档

JAVA启动参数自定义配置,请参见配置Java启动参数

示例值:-XX:MaxHeapFreeRatio=50%

查看执行结果

  • 方法一:在应用变更记录页面中查看应用变更详情,如果显示执行成功,表示部署成功且配置已生效。

  • 方法二:在应用总览页面单击运行状态右侧的Pod运行状态链接,在容器组(Pod)区域查看Pod的状态,如果显示为代表运行中的绿色圆圈,则说明部署成功,配置已生效。