全部產品
Search
文件中心

Container Service for Kubernetes:使用SysOM定位容器記憶體問題

更新時間:Aug 30, 2024

為解決因容器引擎層的不透明性而導致的故障排查困難問題,阿里雲Container Service for Kubernetes (ACK)團隊推出作業系統核心層的容器監控可觀測能力,為您提供更可靠、透明的容器引擎層,助力您更順利地進行容器化遷移。本文介紹如何使用SysOM定位容器記憶體問題。

前提條件

ack-sysom-monitor監控功能費用說明

啟用ack-sysom-monitor監控功能後,相關組件會自動將監控指標發送至阿里雲Prometheus服務,這些指標將被視為自訂指標。使用自訂指標會引起額外的費用。

為避免產生額外的費用,建議在啟用此功能前,仔細閱讀阿里雲Prometheus的計費概述,瞭解自訂指標的收費策略。費用將根據您的叢集規模和應用數量等因素產生變動。您可以通過資源消耗統計功能,監控和管理您的資源使用方式。

情境描述

容器化已經成為許多企業構建IT架構的最佳實務,因為它能夠帶來降低成本、提高效率的優點,並提供更大的靈活性和可擴充性。

但容器化在一定程度上引入了容器引擎層的不透明性,帶來OOM(Out of Memory)等問題。可能會導致記憶體佔用過高,甚至超出容器的記憶體限制,從而觸發OOM問題。

為解決以上問題,阿里雲Container Service for Kubernetes (ACK)團隊與阿里雲GuestOS作業系統團隊合作,為您提供作業系統核心層的容器監控可觀測能力,制性,從而更好地管理和最佳化容器的記憶體使用量,避免因記憶體黑洞問題引起的OOM問題。

容器記憶體組成

容器的記憶體由應用程式記憶體、核心記憶體和空閑記憶體組成。

記憶體大類

記憶體小類

說明

應用程式記憶體(Application Memory)

應用程式記憶體由以下幾個部分組成:

  • 匿名記憶體(Anon):沒有關聯到檔案的記憶體,例如進程的堆、棧、資料區段等。通過BRK和MMAP分配的堆記憶體。

  • 檔案快取(FileCache):用於緩衝讀取和寫入的檔案資料。其中,最近多次使用的緩衝稱為ActiveFileCache,通常不容易被系統回收。

  • 緩衝區(Buffers):用於儲存塊裝置或檔案系統中繼資料的記憶體。

  • 大頁面(HugeTLB):使用大頁面(HugePages)技術分配的記憶體。

應用程式運行時所使用的記憶體。

核心記憶體(Kernel Memory)

核心記憶體由以下幾個部分組成:

  • Slab:用於管理核心對象緩衝的記憶體池。

  • Vmalloc:用於分配大塊虛擬記憶體空間的機制。

  • allocpage:用於分配本地記憶體的機制。

  • 其他(Others):包括核心棧(KernelStack)、頁表(PageTables)、保留記憶體(Reserve)等。

作業系統核心使用的記憶體。

空閑記憶體(Free Memory)

不涉及。

未被使用的可用記憶體。

實現原理

Kubernetes採用記憶體工作集(Workingset)來監控和管理容器的記憶體使用量。當容器記憶體使用量量超過了設定的記憶體限制或者節點出現記憶體壓力時,Kubernetes會根據Workingset來決定是否驅逐或者殺死容器。通過SysOM監控來排查Pod Workingset高的問題,可以提供更全面、精確的記憶體監控和分析能力,協助營運和開發人員快速定位和解決Workingset過高的問題,從而提高容器的效能和穩定性。

其中,記憶體工作集(Workingset)是指在一定時間範圍內,容器實際正在使用的記憶體部分,即容器當前運行所需的記憶體。Workingset = InactiveAnon + ActiveAnon + ActiveFile。其中,InactiveAnon和ActiveAnon是程式匿名記憶體總大小,ActiveFile是應用程式活躍檔案快取的大小。

使用SysOM功能

基於阿里雲SysOM提供的作業系統核心層Pod、Node維度監控大盤,您可以即時監控記憶體、網路、儲存等的系統層指標。SysOM功能的詳細指標資訊,請參見SysOM核心層容器監控

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > Prometheus 監控

  3. Prometheus 監控頁面,單擊其他頁簽,然後單擊ACK Sysom Pod Kernel Resource Monitor頁簽,查看監控大盤的Pod記憶體資料。

    根據計算公式Workingset = InactiveAnon + ActiveAnon + ActiveFile,分析如何定位記憶體黑洞問題。

    1. Pod記憶體分布地區,SysOM提供Pod維度作業系統核心層記憶體的成分監控。根據Workingset計算公式,在圓餅圖中比較inactive_anonactive_anonactive_file三種類型記憶體的大小,找到佔比最大的記憶體類型。

      如下圖所示,inactive_anon記憶體大小佔比最大。

      image.png

    2. Pod Resource Analysis地區,通過Top工具快速定位叢集中InactiveAnon記憶體消耗最大的Pod。

      如下圖所示,arms-prom的記憶體消耗最大。

      image.png

    3. Pod記憶體詳情地區,查看Pod的詳細記憶體組成。通過Pod Cache(緩衝記憶體)、InactiveFile(非活躍檔案記憶體佔用)、InactiveAnon(非活躍匿名記憶體佔用)、Dirty Memory(系統髒記憶體佔用)等不同記憶體成分的監控展示,發現常見的Pod記憶體黑洞問題。

      image.png

  4. Pod File Cache地區,查看產生較大緩衝記憶體的原因。

    若Pod的記憶體緩衝較大,可能導致Pod工作記憶體佔用升高,這部分緩衝的記憶體會成為Pod工作記憶體的黑洞,最終影響Pod所在的業務體驗。

    image.png

  5. 修複記憶體黑洞問題。

    通過觀測發現容器記憶體黑洞問題,即可通過ACK精細化調度功能進行閉環修複。具體操作,請參見啟用容器記憶體QoS

相關文檔