内核memory的oom进程控制策略-凯发k8国际娱乐官网入口
背景信息
现有操作系统中,支持配置离线业务和在线业务。当内存发生oom时,会优先选择离线业务控制组中的消耗内存最多的进程,结束进程回收内存,但是对于某些离线业务也有核心业务,因此会造成很大的影响。
针对这个问题,hce os调整了oom时回收内存的策略,增加了配置cgroup优先级的功能。 内存紧张情况下内核会遍历cgroup,对低优先级的cgroup结束进程,并回收内存,使离线业务中重要的业务可以存活下来。
前提条件
vm.panic_on_oom接口默认开启,系统oom时panic。故使用memcg oom优先级配置时(即memcg_qos_enable配置为1或2),须先执行sysctl -w vm.panic_on_oom=0命令,关闭系统参数vm.panic_on_oom。
memcg oom优先级接口功能说明
接口 |
说明 |
取值 |
---|---|---|
memcg_qos_enable |
memcg oom优先级策略开关。
|
整数形式,取值范围为0~2,默认值为0。 |
memory.qos_level |
配置cgroup组优先级。值越小cgroup组优先级越低。
说明:
|
整数形式,取值范围为-1024~1023,默认值为0。 |
接口配置示例
按如下所示创建6个cgroup子节点a、b、c、d、e、f,配置memcg_qos_enable接口,并通过memory.qos_level接口设置oom的优先级,优先级取值如图所示。
cgroup组 |
memory.qos_level取值 |
说明 |
---|---|---|
a |
-8 |
当在root中进行oom操作时,内核遍历root所有cgroup组,最终选择优先级最低的a、e。由于a和e优先级相同,内核继续对a和e使用的内存进行比较。
|
b |
10 |
|
c |
1 |
|
d |
2 |
|
e |
-8 |
|
f |
3 |
- 关闭系统参数vm.panic_on_oom。
sysctl -w vm.panic_on_oom=0
- 开启memcg oom优先级策略功能。
echo 1 > /proc/sys/vm/memcg_qos_enable
- 运行以下命令创建两个cgroup节点 a、b,并分别设置a、b节点的memcg oom优先级值为-8、10。
mkdir /sys/fs/cgroup/memory/a mkdir /sys/fs/cgroup/memory/b cd /sys/fs/cgroup/memory/a echo -8 > memory.qos_level cd /sys/fs/cgroup/memory/b echo 10 > memory.qos_level
- 运行以下命令分别在a节点下创建c、d子节点,在b节点下创建e、f子节点, 并分别设置c、d、e、f子节点的memcg oom优先级值为1、2、-8、3。
mkdir /sys/fs/cgroup/memory/a/c mkdir /sys/fs/cgroup/memory/a/d mkdir /sys/fs/cgroup/memory/b/e mkdir /sys/fs/cgroup/memory/b/f cd /sys/fs/cgroup/memory/a/c echo 1 > memory.qos_level cd /sys/fs/cgroup/memory/a/d echo 2 > memory.qos_level cd /sys/fs/cgroup/memory/b/e echo -8 > memory.qos_level cd /sys/fs/cgroup/memory/b/f echo 3 > memory.qos_level
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨