在容器服务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配置,详情请参见默认参数优化。 |
创建应用时开启动态内存优化
登录EDAS控制台。
在左侧导航栏,单击 ,在顶部菜单栏选择地域,并在页面上方选择微服务空间,然后在应用列表页面左上角,单击创建应用。
在应用基本信息页签选择集群类型和应用运行环境。
参数
描述
集群类型
选择Kubernetes集群。
应用运行环境
选择Java应用类型再选择部署方式。
Java:支持通用的JAR包部署,适用于Dubbo和Spring Boot应用。在选择后可更改Java环境。
Tomcat:支持通用的WAR包部署,适用于Dubbo和Spring应用。在选择后可更改Java环境和容器版本。
Java环境
选择支持的Java环境:
Dragonwell_11_ElasticHeap
在监控及治理方案选择一体化方案(默认),然后在页面最下方单击下一步。
在应用配置页签,设置应用的环境信息,基本信息,部署方式和资源参数,设置完成后单击下一步。
在应用高级设置页签展开Java启动参数配置,配置初始堆内存,最大堆内存,GC回收策略为G1,配置完成后即可开启动态堆内存优化功能。
展开动态堆内存优化标签栏,开启或关闭动态内存优化功能。
更新应用时配置动态内存优化
登录EDAS控制台。
在左侧导航栏,单击 ,在顶部菜单栏选择地域并在页面上方选择所属微服务空间,在集群类型下拉列表,选择K8s集群,然后在页面单击具体的应用名称。
在应用总览或基本信息页面的右上角,选择 。
在选择部署模式页面,选择具体的部署方式,然后在所选方式区域的右上角,单击开始部署。
在部署设置页面,设置应用运行环境,设置Java环境为Dragonwell_11_ElasticHeap,设置部署包信息后展开Java启动参数配置,为应用设置Java启动参数的初始堆内存,最大堆内存,GC回收策略为G1,单击确定后会显示出动态内存优化标签栏。
展开动态堆内存优化标签栏,可显示出动态内存优化详情。
动态内存优化指标和图表说明
指标说明
动态内存优化开启时,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的状态,如果显示为代表运行中的绿色圆圈,则说明部署成功,配置已生效。