因此,Jammy 22.04 为我们带来了新的好东西,systemd-oomd - 系统管理。在我看来,早就该这么做了……但在 2024 年问这个问题,我也有点迟了。
每个人都已经问过如何禁用它了——然而,我无法发挥作用。
我的用例:自定义系统服务(守护进程)/etc/systemd/system
,我为自己编写了一个单元文件,无论我是否登录,只要操作系统运行时就会运行一个软件。
换句话说,在systemd-cgls
树中,我的fail2ban.service
运行于system.slice
— 之下,而不是之下user.slice
。
这个持续运行的软件正在逐渐泄漏内存。
我以前的方法是通过插入像这样:
# /etc/systemd/system/fail2ban.service.d/mem-limits.conf
[Service]
MemoryAccounting = true
MemoryHigh=155M
MemoryMax=250M
MemorySwapMax=100M
—不再起作用。
我的意思是,它在某种程度上是有效的......升级到 22.04 后,它就有效地挂起服务进程(这是一个 Python 解释器,但 IIUC 并不重要)——而在 20.04 中它触发了OOM 终止&自动重启。
我希望恢复后一种行为:当超出内存限制时,OOM-kill 并重新启动服务守护进程。
我像往常一样执行了 apt-installsystemd-oomd
包,systemctl enable --now systemd-oomd.service
并设法在 中对其进行了配置/etc/systemd/oomd.conf
。命令oomctl
现在显示:
Dry Run: no
Swap Used Limit: 50.00%
Default Memory Pressure Limit: 10.00%
Default Memory Pressure Duration: 5s
System Context:
Memory: Used: 3.2G Total: 15.2G
Swap: Used: 267.2M Total: 7.9G
Swap Monitored CGroups:
Memory Pressure Monitored CGroups:
Path: /user.slice/user-1000.slice/[email protected]
Memory Pressure Limit: 50.00%
Pressure: Avg10: 0.00 Avg60: 0.00 Avg300: 0.00 Total: 0
Current Memory Usage: 2.1M
Memory Min: 0B
Memory Low: 0B
Pgscan: 584
Last Pgscan: 584
除此之外 — — 我已经阅读了几个小时,但仍然完全迷失在 systemd 的“内存压力”选项中,没有清楚地看到我需要为我的目标改变什么以及如何改变。
我是否需要创建一个.slice
与 system.slice 不同的专用版本?如何创建?
我是否需要单独的.scope
?手册页的含义我不明白; a.scope
和 a.slice
都是 CGroup (v2),好吧……但是?有什么区别?
如何让我自己的作品进入内存压力监控的 CGroups显示的列表oomctl
?
有没有人设法在 22.04 中完成这样的工作?