在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配置,詳情請參見預設參數最佳化。 |
建立應用時開啟動態記憶體最佳化
登入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的狀態,如果顯示為代表運行中的綠色圓圈,則說明部署成功,配置已生效。