Colocando limites de memória em serviços systemd — Raspberry Pi

Edjalmo Bf
2 min readFeb 27, 2019

O Raspberry Pi é ótimo! Não conheço outro computador que ofereça tanto por tão pouco dinheiro.

Mas por ser barato existem limitações. O 1gb de memória RAM é uma delas. Se você usa programas como o Sonarr, Radarr, Jackett (principalmente) já deve ter notado que eles usam bastante memória, o que acaba muitas vezes congelando o sistema.

A boa notícia é que existem uma maneira de contornar isso: colocando um limite de memória! Vamos aprender como fazer isso.

O sistema que usaremos como base para demostrar isso é o LibreELEC, uma distro Linux suficiente ("Just enough OS") para rodar o Kodi.

Antes precisamos habilitar esse tipo de limite nas configurações do sistema (acho que em todas distros feitas para o Raspberry Pi isso é necessário, mas não tenho certeza). Para fazer isso basta fazer os passos a seguir:

mount -o remount,rw /flash #deixar a pasta flash em modo escrita
nano /flash/cmdline.txt #para abrir o editor
#Só o que você precisa fazer é colocar "cgroup_enable=memory" dentro, sem as aspas, no final da linha que já existe
Ctrl + X para sair e Y para salvar
mount -o remount,ro /flash #deixar a pasta em somente leitura novamente
Reboot #para reiniciar o sistema

Para colocarmos o limite num programa que roda através de systemd basta somente adicionar dois parâmetros na aba [Service] no arquivo .service do programa. Os parâmetros são MemoryHigh= e MemoryMax=, com os valores desejados de limite.

O programa pode ultrapassar o limite imposto em MemoryHigh, mas ele ficará mais lento e tentara voltar ao limite, diferente do MemoryMax. O limite de MemoryMax é o absoluto, ultrapassado esse limite o programa é reiniciado.

Um exemplo (o que uso no Sonarr/Radarr/Jackett):

[Service]
MemoryHigh=125M
MemoryMax=150M

Para testar basta digitar systemctl status oSeuServico.service e verificar se o campo Memory aparece.

Simple, não?!

Referência:

Systemd Resource Control: https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html

--

--

Edjalmo Bf

Dados insuficientes para uma resposta significativa.