本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
當系統分配內存并在相應的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