Systemd

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

  • August 28, 2019

我正在嘗試配置我的 .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 docs 的理解嘗試配置的線。

我的 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使用選定的選項重建核心就足夠了嗎?

是的,打開該選項足以使 MemoryMax 按預期工作。

引用自:https://unix.stackexchange.com/questions/537724