我正在尝试配置我的 .service 文件,以按系统内存的百分比(在本例中为 10% 作为上限)来限制给定服务在终止之前可以使用的内存量:
[Unit]
Description=MQTT Loop
After=radioLoop.service
[Service]
Type=simple
Environment=PYTHONIOENCODING=UTF-8
ExecStart=/usr/bin/python3 -u /opt/pilot/mqttLoop.py
WorkingDirectory=/opt/pilot
StandardOutput=journal
Restart=on-failure
User=pilot
MemoryMax=10%
[Install]
WantedBy=multi-user.target
感兴趣的线是MemoryMax
我根据我的理解尝试配置的线系统文档。
我的 systemd 版本是:
systemd 241 (241)
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid
但这不起作用。
# ps -m -o lwp,rss,pmem,pcpu,unit -u pilot
LWP RSS %MEM %CPU UNIT
- 76244 30.3 8.5 mqttLoop.service
1232 - - 7.0 mqttLoop.service
1249 - - 1.7 mqttLoop.service
1254 - - 0.2 mqttLoop.service
我已远远超过 10%(那里是 30%),然后它没有重新启动该过程。我尝试过更换MemoryMax
(MemoryLimit
相同值的旧版本),但没有效果。我遗漏了什么?
更新
我已确定用于处理计数的 systemd 设置已正确打开。
# grep -i "memory" system.conf
#DefaultMemoryAccounting=yes
但我在内核配置中注意到以下内容:
使用所选选项重建内核就足够了吗Memory Controller
?
答案1
是的,打开该选项足以使 MemoryMax 按预期工作。