调整内存终止优先级
--oom-score-adj 调整容器进程被内存不足终止机制选中的倾向,取值范围从负数到正数:让核心容器比批量任务更不容易被杀。它只是加权,并不阻止内存超用本身。
基本信息
| 语法 | --oom-score-adj=<整数> |
|---|---|
| 作用 | 调整被选中终止的倾向 |
| 验证 | 读取进程对应的 oom_score_adj 文件 |
| 局限 | 不阻止内存超用 |
| 适用平台 | Linux 上的 Docker Engine |
典型使用场景
- 区分核心服务与批量任务,让核心服务在竞争中更安全
- 容量紧张时降低批处理任务被保留的概率
- 排查某容器频繁被终止是否与优先级设置有关
- 验证参数是否真正写入了进程
- 压测阶段观察不同优先级下的存活情况
设置与核对
设置与核对
docker run -d --name core --oom-score-adj=-500 app/core:2.1 # 更不容易被选中
docker run -d --name batch --oom-score-adj=500 app/batch:1.0 # 更容易被选中
cat /proc/$(docker inspect -f '{{.State.Pid}}' core)/oom_score_adj # 核对生效值取值方向与适用对象
| 取值方向 | 含义 | 适用对象 |
|---|---|---|
| 负值 | 降低被终止的概率 | 核心在线服务 |
| 零 | 默认 | 无特殊要求的容器 |
| 正值 | 提高被终止的概率 | 可重试的批处理任务 |
| 极端取值 | 效果更强 | 需要谨慎评估影响 |
负值降低被选中的概率、正值提高;分数只在发生内存竞争时参与判决。
它只是加权不是保护,真要防止被杀还是靠内存限额与容量规划。
脚本里用等号形式写负值,避免负号被参数解析器误认为选项。
多个容器同时设置优先级时,实际结果取决于相对关系,单独看一个数值意义有限。
容器被终止后要先确认是宿主机内存不足还是容器自身超限,两种情形的处置方向不同。
调整的是容器进程的取值,宿主上其他服务的取值不受影响,容量评估时不要把两者的结论互相套用。
容器数量多时逐个设置优先级不现实,通常只对少数核心服务做差异化设置,其余保持默认。