CEVIU Logo
Voltar
PostgreSQL e OOM Killer: A Imperativa Gestão de Memória com Strict Overcommit

PostgreSQL e OOM Killer: A Imperativa Gestão de Memória com Strict Overcommit

Aprofundamento CEVIU

Linha do tempo

  1. Introdução do bug de contabilização de memória no kernel Linux 6.5 (commit 408579c).

  2. Ubicloud ativa 'strict memory overcommit' em seus serviços PostgreSQL e começa a enfrentar falhas de OOM com memória física disponível, desabilitando a configuração temporariamente.

  3. Correção do bug de contabilização de memória no kernel Linux (antes da versão 6.8), com envolvimento de Linus Torvalds.

  4. Ubicloud retorna à ativação de 'strict memory overcommit' para PostgreSQL após a correção do kernel, reforçando a importância da gestão de memória.

Perguntas frequentes

O que é 'strict memory overcommit' e como ele funciona com PostgreSQL?

É uma política do kernel Linux, configurada via `vm.overcommit_memory=2`, que exige que a alocação de memória seja validada antes de ser concedida. Para o PostgreSQL, isso significa que, em vez de o kernel matar um processo por falta de memória (OOM kill), o PostgreSQL recebe um erro `ENOMEM` que pode gerenciar individualmente por conexão.

Por que o PostgreSQL é tão sensível a falhas de OOM (Out Of Memory) tradicionais?

O PostgreSQL usa processos backend que compartilham memória (buffers, WAL, tabelas de locks). Um OOM killer do kernel não entende essa arquitetura e, ao matar um processo, pode deixar a memória compartilhada em estado inconsistente, levando o PostgreSQL a encerrar todas as conexões e iniciar uma recuperação de crash para proteger a integridade dos dados.

Como é determinado o CommitLimit no 'strict memory overcommit'?

O `CommitLimit` é o limite de memória virtual que o kernel pode prometer alocar. Ele é calculado por `(overcommit_ratio * MemTotal) / 100` ou, se `overcommit_kbytes` for definido, por `(MemTotal, AnonPages) + overcommit_kbytes`. O Ubicloud usa uma heurística de 80% da memória física total mais 2 GB para cobrir o kernel e sidecars.

Quais são os benefícios de usar 'strict memory overcommit' para desenvolvedores?

A principal vantagem é a estabilidade. Ele transforma falhas catastróficas em erros pontuais, isolando problemas de memória a uma única conexão ou transação, sem derrubar todo o banco de dados. Isso garante melhor resiliência e disponibilidade do serviço.

Fontes

Avalie este artigo:
Compartilhar:
Categoria
CEVIU Web Dev
Publicado
06 de julho de 2026
Editoria
CEVIU Web Dev

Quer receber mais sobre CEVIU Web Dev?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser