剖析 Linux 内核虚拟内存 Overcommit 策略、OOM badness 算法,以及如何精准控制进程的 oom_score_adj。
一、 内核 Overcommit 与 OOM 触发策略
在 /etc/sysctl.conf 中调优内存过载限制:
# 0: 启发式过载; 1: 始终允许过载; 2: 拒绝超过 Swap + RAM*ratio 的请求 vm.overcommit_memory = 2 vm.overcommit_ratio = 80 # 触发 OOM 时不进行 Kernel Panic vm.panic_on_oom = 0
二、 badness 评分与进程豁免配置
# 查看任意进程当前 OOM 评分 cat /proc/$PID/oom_score # 降低特定核心进程 (如 mysqld/nginx) 被 Kill 的概率 # 范围 -1000 到 1000,-1000 表示彻底禁用 OOM Killer 杀此进程 echo -1000 > /proc/$(pgrep -f mysqld)/oom_score_adj