全部產品
Search
文件中心

Enterprise Distributed Application Service:配置動態記憶體最佳化

更新時間:Jun 30, 2024

在Container ServiceK8s叢集或Serverless K8s叢集中建立或部署應用時,您可以根據應用記憶體佔用率水位,一鍵開啟動態記憶體最佳化來提升應用的堆記憶體佔用率。合理地使用動態記憶體最佳化,不僅能提升單應用的記憶體利用率,還可以提升Container ServiceK8s叢集中單節點部署的單位副本數和降低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的狀態,如果顯示為代表運行中的綠色圓圈,則說明部署成功,配置已生效。