要限制 systemd 服務(wù)的最大內(nèi)存使用,可編輯其 service 文件并添加 memorymax 配置項(xiàng)。1. 找到服務(wù)對(duì)應(yīng)的 .service 文件,通常位于 /etc/systemd/system/ 或 /lib/systemd/system/ 目錄;2. 在 [service] 段落中添加 memorymax=指定值(如 512m)以設(shè)置硬性內(nèi)存上限;3. 可選配置 memoryswapmax=0 來(lái)禁止使用 swap;4. 修改后執(zhí)行 systemctl daemon-reload 和 restart 重啟服務(wù);5. 使用 systemctl show 驗(yàn)證配置是否生效;注意事項(xiàng)包括確保 systemd 版本支持、避免設(shè)置過(guò)低導(dǎo)致崩潰及結(jié)合日志排查異常問(wèn)題。
如果你在用 systemd 管理服務(wù),想限制某個(gè)服務(wù)的最大內(nèi)存使用,其實(shí)可以通過(guò)修改它的 service 文件來(lái)實(shí)現(xiàn)。systemd 提供了 MemoryMax 這個(gè)配置項(xiàng),可以輕松設(shè)置內(nèi)存上限,避免服務(wù)占用過(guò)多資源。
如何找到并編輯服務(wù)的 unit 文件
大多數(shù)服務(wù)都會(huì)有一個(gè)對(duì)應(yīng)的 .service 文件,通常位于 /etc/systemd/system/ 或 /lib/systemd/system/ 目錄下。比如你想限制 nginx 的內(nèi)存使用,就去找 nginx.service 文件。
你可以用以下命令查看當(dāng)前服務(wù)的狀態(tài)和加載路徑:
systemctl status 服務(wù)名
找到文件后,可以用 sudo 加上你喜歡的編輯器打開(kāi)它,比如:
sudo nano /etc/systemd/system/服務(wù)名.service
如果服務(wù)是通過(guò)多實(shí)例方式運(yùn)行的(比如 app@instance.service),那你需要編輯對(duì)應(yīng)的那個(gè)實(shí)例文件。
在 service 文件中添加 MemoryMax 配置
在 [Service] 段落中加入一行:
MemoryMax=512M
這表示該服務(wù)最多只能使用 512MB 內(nèi)存。你也可以寫成其他單位,比如 2G、1024K,systemd 支持常見(jiàn)的單位縮寫。
這個(gè)限制是“硬性”的,一旦服務(wù)使用的內(nèi)存超過(guò)這個(gè)值,systemd 會(huì)直接把它 kill 掉。所以設(shè)置之前最好了解這個(gè)服務(wù)的正常內(nèi)存需求,避免誤殺。
注意:如果你還希望限制 swap 使用,可以同時(shí)加上 MemorySwapMax=0 來(lái)禁止它使用交換分區(qū)。
重新加載 systemd 并驗(yàn)證配置是否生效
改完文件后記得執(zhí)行:
sudo systemctl daemon-reload sudo systemctl restart 服務(wù)名
然后可以用下面這條命令檢查限制有沒(méi)有應(yīng)用成功:
systemctl show 服務(wù)名 | grep MemoryMax
如果看到輸出類似 MemoryMax=536870912(也就是 512MB 的字節(jié)數(shù)),說(shuō)明配置已經(jīng)生效。
一些常見(jiàn)問(wèn)題和注意事項(xiàng)
-
系統(tǒng)版本要支持:MemoryMax 是從 systemd v231 開(kāi)始引入的,太老的系統(tǒng)可能不支持。
-
某些環(huán)境可能受限于 cgroup 版本:比如使用 cgroup v1 的系統(tǒng),有些功能可能表現(xiàn)不同。
-
不要設(shè)得太低:如果限制太小,服務(wù)啟動(dòng)時(shí)可能會(huì)直接崩潰。
-
結(jié)合日志排查問(wèn)題:如果服務(wù)被 kill,可以看 journal 日志找原因:
journalctl -u 服務(wù)名 --since "1 hour ago"
基本上就這些。設(shè)置起來(lái)不復(fù)雜,但要注意別影響到服務(wù)正常運(yùn)行。