系统 MemoryMax 按百分比不起作用?

系统 MemoryMax 按百分比不起作用?

我正在尝试配置我的 .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%),然后它没有重新启动该过程。我尝试过更换MemoryMaxMemoryLimit相同值的旧版本),但没有效果。我遗漏了什么?

更新

我已确定用于处理计数的 systemd 设置已正确打开。

# grep -i "memory" system.conf
#DefaultMemoryAccounting=yes

但我在内核配置中注意到以下内容:

在此输入图像描述

使用所选选项重建内核就足够了吗Memory Controller

答案1

是的,打开该选项足以使 MemoryMax 按预期工作。

相关内容