Linux-Kernel
如何永久設置守護程序的OOM殺手調整?
執行一些帶有單個或幾個重要係統服務守護程序的 Linux 伺服器,我想為這些守護程序調整 OOM 殺手,以防發生奇怪的事情。例如,今天一些執行 MySQL 的 Ubuntu 伺服器遇到了一個終止的 MySQL 守護程序,因為大量
apt-checker
程序正在消耗所有記憶體,並且核心認為終止 MySQL 是一個好主意。我知道我可以使用該
/proc/$(pidof mysqld)/oom_score_adj
文件調整分數,以給核心一些線索,我不希望 MySQL 被殺死,但這無法在服務重新啟動後繼續存在。我應該從包中編輯 init/upstart 腳本以包含這些調整嗎?我不認為這是一個非常優雅的解決方案,因為我會調整屬於一個包的文件。是否可以在一般情況下掛鉤新貴/初始化腳本並有條件地調整它?或者你會建議執行一個無限期的腳本while true{ adjust_oom(); sleep 60;}
嗎?
一些現代的守護程序監督系統有辦法做到這一點。(確實,既然有一個鍊式載入工具可以完成這項工作,可以說他們都有辦法做到這一點。)
- Upstart:
oom score
在作業文件中使用。oom 分數 -500
- **systemd:**使用
OOMScoreAdjust=
服務單元中的設置。您可以使用服務單元更新檔文件來影響預打包的服務單元。[服務] OOMScoreAdjust=-500
- **daemontools 系列:**使用該服務程序中
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
shim 進行操作):rcctl 設置服務名稱*oomprotect* -500
進一步閱讀
- 喬納森·德博因·波拉德 (2016)。
oom-kill-protect
. nosh 工具集。軟體。- 詹姆斯·亨特和克林特·拜魯姆 (2014)。“
oom score
”。 新貴食譜。- Lennart Poettering (2013-10-07)。“
OOMScoreAdjust
”。systemd.exec
. systemd 手冊頁。免費桌面.org。- 喬納森·德博因·波拉德。
rcctl
. nosh 工具集。軟體。- https://unix.stackexchange.com/a/409454/5132