Estou tentando configurar meu arquivo .service para limitar a quantidade de memória que um determinado serviço pode usar antes de ser encerrado, por porcentagem de memória do sistema (10% como limite superior neste caso):
[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
A linha de interesse é a MemoryMax
linha, que tentei configurar com base no meu entendimento dos systemd docs .
Minha versão do 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
Mas não funciona.
# 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
Estou ficando bem acima de 10% (30% lá), e aí não reinicia o processo. Eu tentei trocar MemoryMax
por MemoryLimit
(a variante mais antiga de mesmo valor), mas não tem efeito. o que estou perdendo?
ATUALIZAR
Eu determinei que as configurações do systemd para processamento de contagem estão ativadas corretamente.
# grep -i "memory" system.conf
#DefaultMemoryAccounting=yes
Mas noto o seguinte na minha configuração do kernel:
Será suficiente que eu reconstrua meu kernel com a Memory Controller
opção selecionada?
Sim, ativar essa opção foi suficiente para permitir que o MemoryMax funcionasse conforme o esperado.