特定のサービスがシステムメモリの割合(この場合の制限は10%)で終了する前に使用できるメモリ量を制限するように.serviceファイルを設定しようとしています。
[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 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
以前のバージョンを同じ値に)置き換えようとしましたが、何の効果もありません。私は何を見逃していますか?
修正する
計算処理のためのシステム設定が正しくオンになっていることを確認しました。
# grep -i "memory" system.conf
#DefaultMemoryAccounting=yes
しかし、カーネル構成で次のことがわかりました。
選択したオプションでカーネルを再構築するのに十分ですかMemory Controller
?
答え1
はい、このオプションをオンにすると、MemoryMaxが期待どおりに機能します。