内存子系统服务质量(memcg QoS)是Linux系统中用来管理和优化内存资源的功能,支持设置内存保障来锁定特定量的内存以保证关键服务或应用的运行需求,并设置内存上限防止个别任务消耗过多内存影响整个系统稳定性。社区版内核中只有cgroup v2
接口支持该功能。在Alibaba Cloud Linux 2(内核版本4.19.91-18.al7
开始)和Alibaba Cloud Linux 3新增cgroup v1
接口支持memcg QoS的相关功能。
背景信息
在Alibaba Cloud Linux内核中,cgroup v1
接口中默认开启memcg QoS
功能。关于memcg QoS
的更多信息,您可以参见内核文档Documentation/admin-guide/cgroup-v2.rst
。内核文档通过Alibaba Cloud Linux的Debuginfo包和源码包获取,获取请参见Alibaba Cloud Linux 2使用说明。
注意事项
使用cgroup v1
接口的memcg QoS功能时,建议将任务放置在memcg的叶子节点中,例如,/sys/fs/cgroup/memory/<intermediate node>/<leaf node>/tasks路径下。
接口说明
本节介绍Alibaba Cloud Linux内核中cgroup v1
接口实现memcg QoS功能的相关接口。
接口 | 描述 |
memory.min | 绝对锁定内存:即使系统没有可回收的内存,也不会回收该接口锁定的内存,使该cgroup内的进程能够获得设置的最小内存的保证,避免服务性能的下降;适用于为了性能需求,需要保证最小常驻内存的服务。 读写说明如下:
|
memory.low | 相对锁定内存:如果系统没有其他可回收的内存,该接口锁定的内存也会被回收一部分,系统在资源紧张的时候能够做出更合理的内存分配策略;适用于需要一定保护但无需绝对保护的服务,比如非关键业务的应用程序、后台任务等。 读写说明如下:
|
memory.high | 限制memcg的内存使用,读写说明如下:
|
接口示例
在Alibaba Cloud Linux 3操作系统中,memcg的挂载目录下,例如/sys/fs/cgroup/memory/路径下,分配或限制内存使用。
操作以下命令仅使用root用户。
示例命令如下。
运行以下命令,创建test_memcg目录。
mkdir /sys/fs/cgroup/memory/test_memcg
设置绝对锁定内存。
运行以下命令,设置绝对锁定内存为200 MB。
echo 209715200 > /sys/fs/cgroup/memory/test_memcg/memory.min
运行以下命令,查看结果。
cd /sys/fs/cgroup/memory/test_memcg cat memory.min
设置相对锁定内存。
运行以下命令,设置绝对锁定内存为200 MB。
echo 209715200 > /sys/fs/cgroup/memory/test_memcg/memory.low
运行以下命令,查看结果。
cd /sys/fs/cgroup/memory/test_memcg cat memory.low
设置限制内存的上限。
运行以下命令,设置限制内存的上限为1 GB。
echo 1073741824 > /sys/fs/cgroup/memory/test_memcg/memory.high
运行以下命令,查看结果。
cd /sys/fs/cgroup/memory/test_memcg cat memory.high