在容器服務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的狀態,如果顯示為代表運行中的綠色圓圈,則說明部署成功,配置已生效。