Linux 内存溢出时,会触发OOM导致卡顿,一卡就卡几分钟。 相比进程被杀,卡顿更是不可接受的。
最简单的评估Linux内存不足的方法就是直接观察 已分配内存是否已经逼近上限,在逼近上限时,立刻干掉最大内存消耗的进程,就可以在卡顿边缘把机器救回来。
坑的是Linux本身却没有这种在OOM早期就杀掉进程机制,只能等待极为缓慢 OOM过程。 只能使用第三方工具来实现早期OOM功能了。
大佬开发的工具 earlyoom 在OOM之前就能挽救系统,拯救卡顿时间。
https://github.com/rfjakob/earlyoom
使用方法:
apt install earlyoom
systemctl enable --now earlyoom
默认情况下 剩余可用物理内存小于 10% 和 剩余交换内存小于10%时,就会触发早期OOM SIGTERM when mem <= 10 % and swap <= 10 %, SIGKILL when mem <= 5 % and swap <= 5 %
如果觉得剩余内存保留太多,可以来这里编辑 earlyoom 的配置文件
vim /etc/default/earlyoom
systemctl restart earlyoom
建议配置设置 -r 60 代表每60秒打印一次内存统计信息 -m 1 代表保留物理内存为1% -s 5 代表保留交换内存为5% –avoid ‘(^|/)(init|X|sshd)$’ 代表任何时候不要杀死名字带有 init,X,sshd 的进程
EARLYOOM_ARGS="-r 60 -m 1 -s 5 --avoid '(^|/)(init|X|sshd)$'"
|