Skip to content

Instantly share code, notes, and snippets.

@daltux
Last active November 13, 2023 03:47
Show Gist options
  • Save daltux/0b838051fd4aa2d759e7c3bc81f445fa to your computer and use it in GitHub Desktop.
Save daltux/0b838051fd4aa2d759e7c3bc81f445fa to your computer and use it in GitHub Desktop.
Texto sobre instabilidade no Ubuntu recente, seu motivo e como resolver

Instabilidade no Ubuntu: motivo e solução

Publicado em 19 de julho de 2023. Última revisão: 21/07/2023.

Ubuntu, recentemente (22.041 em diante), na sua variação para desktop, inclui um serviço "systemd-oomd" que mata processos que estejam consumindo muita memória, preventivamente, bem antes que ela se esgote e haja potencial travamento. A ideia parece boa, porém, como está implementada, acaba sendo exagerada.

Não adianta disponibilizar mais swap2, pois o novo mecanismo entra em ação quando qualquer processo (leia-se provavelmente o navegador) tem a tendência de ocupar mais do que 50% da RAM por mais de 20s, por padrão. Pode conferir suas definições executando oomctl. Mesmo alterar as configurações (em /etc/systemd/oomd.conf) parece não solucionar, pois, no fim, impede que o usuário ocupe toda a memória.

Na prática comum, se a máquina não tiver muita RAM sobrando, o navegador, ao ser utilizado mais intensamente, acaba sendo fechado bruscamente, enquanto ainda praticamente nem foi usada swap. Pior que, se não olhar o syslog3 (ou journalctl4), o usuário nem fica sabendo por quê5. Talvez culpe a aplicação. Havendo escassez de RAM, isso pode acontecer com qualquer programa razoavelmente espaçoso como, por exemplo, enquanto edita uma planilha ou outro arquivo, ou desenvolve um sistema. Há relatos6 de que, dependendo da situação, até aquele que chamou os processos pode vir a ser encerrado, como seu terminal ou a área de trabalho completa. Portanto, há risco de perder dados não salvos.

Independentemente do que tentam sistemas operacionais, utilitários ou aplicativos para mitigar a questão, é claro que utilizar uma máquina com memória insuficiente terá efeitos indesejados ou será até inviável. Swap felizmente permite que mais memória esteja disponível para processos em execução, tendo o efeito adverso de lentidão ao transferir páginas de memória para/do armazenamento, sobretudo se este for mecânico7. O "systemd-oomd", por matar processos antes que ocupem toda a memória, dá uma falsa sensação de menos travamento. Entretanto, o preço a pagar por essa comodidade é alto.

O que se pode fazer, por enquanto, data venia, é contrariar a Canonical (empresa que mantém o Ubuntu) e retornar ao que sempre funcionou, bem ou mal: confiar apenas no próprio Kernel (Linux) para matar emergencialmente os processos mais vorazes somente quando estiver esgotada a memória total, incluindo swap. É uma situação extrema em que já não há mais memória disponível, gerando congelamento até que o Kernel, vagarosamente, consiga recuperar memória suficiente para os processos sobreviventes continuarem a execução. Essa problemática foi a motivação de Ubuntu incluir tal serviço paralelo, para evitar esse tipo de travamento. Contudo, acaba podendo ser pior.

É possível desabilitar o systemd-oomd com: sudo systemctl disable --now systemd-oomd.service

Mas, isto não garante que ele não seja invocado posteriormente por algum outro serviço. De fato, mesmo com o serviço desabilitado, ele pode acabar sendo encontrado em execução após um reboot, gerando os mesmos sintomas. Uma alternativa seria "mascará-lo": sudo systemctl mask systemd-oomd 8

A mais eficaz e definitiva solução é desinstalar o pacote systemd-oomd9. Não há dependentes, portanto não há impedimento:

sudo apt remove --purge systemd-oomd

Se, futuramente, o funcionamento de tal mecanismo for aperfeiçoado, ou se mudar de ideia, basta reinstalar esse pacote.

Observação

O texto está focado no Ubuntu pois era uma distribuição que o autor utilizava no cotidiano à época da redação, todavia também é válido para outras que trazem o "systemd-oomd", como Fedora ≥34.10

Footnotes

  1. Ubuntu 22.04 LTS lançado em abril de 2022. Confira os detalhes (em inglês).

  2. Mecanismo de memória virtual: partição ou arquivo de troca de paginação de memória física para disco que permite ter mais memória livre.

  3. Registro de eventos do sistema, geralmente disponível no arquivo /var/log/syslog.

  4. Saiba como utilizar o journalctl para visualizar mensagens do systemd.

  5. Cf. relato de bug do systemd.

  6. Cf., p. ex., https://techhq.com/2022/07/ubuntu-22-oomd-app-killer-memory-pressure/, https://bugzilla.redhat.com/show_bug.cgi?id=1941340, https://bugzilla.redhat.com/show_bug.cgi?id=1933494, https://askubuntu.com/questions/1404888

  7. Há maneiras de otimizar um pouco o uso de swap atualmente, como zswap ou zram, boas sugestões. Confira ainda um texto do Arch Linux a respeito (em inglês), incluindo outras opções de limpeza automática de memória similares ao "systemd-oomd".

  8. Cf. https://www.cjjackson.dev/posts/what-is-systemd-oomd-how-to-disable-it/

  9. Cf. https://askubuntu.com/a/1423840/1007603

  10. Cf. relato de bug de 2021.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment