PostgreSQL e OOM Killer: A Imperativa Gestão de Memória com Strict Overcommit
Aprofundamento CEVIU
Linha do tempo
Introdução do bug de contabilização de memória no kernel Linux 6.5 (commit 408579c).
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.
Correção do bug de contabilização de memória no kernel Linux (antes da versão 6.8), com envolvimento de Linus Torvalds.
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
- ubicloud.comfonte original
- Categoria
- CEVIU Web Dev
- Publicado
- 06 de julho de 2026
- Editoria
- CEVIU Web Dev

