全部產品
Search
文件中心

Alibaba Cloud Linux:Memcg後台非同步回收記憶體

更新時間:Aug 21, 2024

當系統分配記憶體並在相應的Memcg中統計達到Memcg設定的記憶體上限時,將觸發Memcg層級的直接記憶體回收。直接記憶體回收是在記憶體配置上下文中同步進行的,會影響當前進程的效能。Alibaba Cloud Linux 2(核心4.19.81-17.al7及以上版本)和Alibaba Cloud Linux 3(核心5.10.134-12.al8及以上版本)新增了Memcg粒度的後台非同步回收功能,從而動態、高效的管理cgroup記憶體使用量,避免資源耗盡。

警告
  • 當前Memcg的記憶體配置,可能會遞迴觸發父組的後台非同步回收。

  • 觸發Memcg後台非同步回收時,會從當前被觸發的Memcg開始,自上而下做層級回收。

  • 在配置了memory.high介面並且memory.high的值小於memory.limit_in_bytes介面的值時,介面memory.wmark_highmemory.wmark_low水位線的計算將基於memory.high而非memory.limit_in_bytes

memcg後台非同步回收功能介面說明

介面

說明

memory.wmark_ratio

設定是否啟用Memcg後台非同步回收功能,以及設定非同步回收功能開始工作的memcg記憶體水位線。

單位:相對於memcg limit的百分比。

取值範圍:0~100。

  • 預設值為0,表示禁用memcg後台非同步回收功能。

  • 取值為非0時,表示開啟memcg後台非同步回收功能並設定對應的水位線。

memory.wmark_high

Memcg記憶體使用量超過該介面的值時,後台非同步回收功能啟動。

唯讀介面,說明如下:

  • 該介面的值由memory.limit_in_bytes * memory.wmark_ratio / 100計算獲得。

  • memcg後台非同步回收功能被禁用時,memory.wmark_high預設為一個最大值,從而達到永不觸發後台非同步回收功能的目的。

  • memcg根組目錄下不存在該介面檔案。

memory.wmark_low

memcg記憶體使用量低於該介面的值時,後台非同步回收結束。

唯讀介面,說明如下:

  • 該介面的值由memory.wmark_high - memory.limit_in_bytes * memory.wmark_scale_factor / 10000計算得出。

  • memcg根組目錄下不存在該介面檔案。

memory.wmark_scale_factor

控制memory.wmark_highmemory.wmark_low之間的間隔。

單位:相對於memcg limit的萬分比。

取值範圍:1~1000。

  • 在建立該介面時,會繼承父組的值(預設為50),即為memcg limit的千分之五。

  • memcg根組目錄不存在該介面檔案。

介面配置樣本

  1. 建立測試檔案。

    sudo mkdir /sys/fs/cgroup/memory/test/
  2. 設定記憶體使用量量限制介面memory.limit_in_bytes

    本樣本限制為1 G。

    sudo sh -c 'echo 1G > /sys/fs/cgroup/memory/test/memory.limit_in_bytes'
  3. 配置memory.wmark_ratio介面。

    以設定非同步回收功能開始工作的memcg記憶體水位線為memcg limit的95%為例。

    sudo sh -c 'echo 95 > /sys/fs/cgroup/memory/test/memory.wmark_ratio'
  4. 查看memcg記憶體控制組中介面的值。

    • 查看memory.wmark_scale_factor介面的值。

      cat /sys/fs/cgroup/memory/test/memory.wmark_scale_factor

      預設值為memcg limit的千分之五。介面值返回樣本:50。

    • 查看memory.wmark_high介面的值。

      cat /sys/fs/cgroup/memory/test/memory.wmark_high
    • 查看memory.wmark_low介面的值。

      cat /sys/fs/cgroup/memory/test/memory.wmark_low