當系統分配記憶體並在相應的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_high
和memory.wmark_low
水位線的計算將基於memory.high
而非memory.limit_in_bytes
。
memcg後台非同步回收功能介面說明
介面 | 說明 |
| 設定是否啟用Memcg後台非同步回收功能,以及設定非同步回收功能開始工作的memcg記憶體水位線。 單位:相對於 取值範圍:0~100。
|
| Memcg記憶體使用量超過該介面的值時,後台非同步回收功能啟動。 唯讀介面,說明如下:
|
| memcg記憶體使用量低於該介面的值時,後台非同步回收結束。 唯讀介面,說明如下:
|
| 控制 單位:相對於 取值範圍:1~1000。
|
介面配置樣本
建立測試檔案。
sudo mkdir /sys/fs/cgroup/memory/test/
設定記憶體使用量量限制介面
memory.limit_in_bytes
。本樣本限制為1 G。
sudo sh -c 'echo 1G > /sys/fs/cgroup/memory/test/memory.limit_in_bytes'
配置
memory.wmark_ratio
介面。以設定非同步回收功能開始工作的
memcg
記憶體水位線為memcg limit
的95%為例。sudo sh -c 'echo 95 > /sys/fs/cgroup/memory/test/memory.wmark_ratio'
查看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