防止mysql进程被OOM Killer杀死

Jia*_*Liu 6 mysql-5.6

我需要保护mysql进程,这样当系统内存不足时它就不会被杀死,我们不时在服务器上运行一堆临时作业,所以我更喜欢杀死临时作业而不是mysql。

我知道我可以调整 oom_score_adj,通过将其设置为 -1000,我可以将其排除在 OOM 杀手的考虑范围之外。但我不确定是否需要重新启动mysql进程才能使新的oom_score_adj生效?调整正在运行的进程的oom_score_adj是否仍然有效?

我正在关注这篇文章,没有其他人提到重新启动服务器以使新的 oom_score_adj 生效: https: //blog.rimuhosting.com/2015/12/11/dont-let-the-oom-killer-stop-mysql/

另一个愚蠢的问题是我似乎无法写入 oom_score_adj 文件,总是被拒绝权限。oom_score_adj 不属于 root,我尝试了几个选项,但不断遇到权限问题:

 echo "echo '-100' > /proc/5653/oom_score_adj" | sudo -u {file_owner} sh
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助!

dan*_*ack 9

RHEL7 使用 systemd。 使用 OOMScoreAdjust如下:

sudo systemctl edit mysqld.service
Run Code Online (Sandbox Code Playgroud)

注意:我不确定确切的服务名称

添加以下文本:

[Service]
OOMScoreAdjust=-1000
Run Code Online (Sandbox Code Playgroud)

重新启动:

systemctl restart mysqld.service
Run Code Online (Sandbox Code Playgroud)

通过查看分数来检查:

cat /proc/$(pidof mysqld)/oom_score_adj
Run Code Online (Sandbox Code Playgroud)