ger*_*ijk 16 linux-kernel daemon out-of-memory
使用单个或几个重要的系统服务守护进程运行一些 Linux 服务器,我想为这些守护进程调整 OOM 杀手,以防发生奇怪的事情。例如,今天一些运行 MySQL 的 Ubuntu 服务器杀死了一个 MySQL 守护进程,因为大量apt-checker
进程正在消耗所有内存,内核认为杀死 MySQL 是个好主意。
我知道我可以使用该/proc/$(pidof mysqld)/oom_score_adj
文件调整分数来为内核提供一些线索,我不希望 MySQL 被杀死,但这在服务重新启动后无法生存。我应该编辑包中的 init/upstart 脚本以包含这些调整吗?我认为这不是一个非常优雅的解决方案,因为我会对属于一个包的文件进行调整。是否可以在一般情况下连接到 upstart/init 脚本并有条件地调整它?或者你会建议运行一个不确定的脚本while true{ adjust_oom(); sleep 60;}
吗?
Jde*_*eBP 12
几个现代守护进程监督系统有这样做的方法。(事实上,由于作业链装载工具,可以说他们都对这样的手段。)
oom score
在作业文件。oom 分数 -500
OOMScoreAdjust=
服务单元中的设置。您可以使用服务单元补丁文件来影响预先打包的服务单元。[服务]
OOMScoreAdjust=-500
oom-kill-protect
nosh 工具集中的工具run
。如果您要转换系统服务单元,该convert-systemd-units
工具实际上会将OOMScoreAdjust=
设置转换为这样的oom-kill-protect
.
#!/bin/nosh作为奖励,您可以使其参数化:
...
oom-kill-protect -- -500
...
程序 参数
oom-kill-protect -- fromenv并在服务的环境中设置参数的值(假设是从与服务关联的 envdir 中读取的,这里使用 nosh 工具集的
rcctl
垫片操作):rcctl集SERVICENAME oomprotect -500
oom-kill-protect
. nosh 工具集。软件。oom score
”。 新贵食谱。OOMScoreAdjust
”。 systemd.exec
. systemd 手册页。freedesktop.org。rcctl
. nosh 工具集。软件。这在 Ubuntu 中使用 Upstart 和oom score
配置选项是可能的。
Linux 有一个“内存不足”杀手工具。[...]
通常,OOM 杀手对所有进程一视同仁,本节建议内核区别对待这项工作。
提供给本节的“调整”值可以是从 -999(极不可能被 OOM 杀手杀死)到 1000(极有可能被 OOM 杀手杀死)的整数值。[...]
例子:
Run Code Online (Sandbox Code Playgroud)# this application is a "resource hog" oom score 1000 expect daemon respawn exec /usr/bin/leaky-app