PostgreSQL e OOM Killer: A Imperativa Gestão de Memória com Strict Overcommit
Aprofundamento CEVIU
Aprofundamento
A gestão de memória é um pilar crítico para a estabilidade de qualquer sistema, especialmente em bancos de dados de alta performance como o PostgreSQL. A abordagem de strict memory overcommit no Linux, configurada via vm.overcommit_memory=2, é uma prática essencial para desenvolvedores que buscam robustez. Ela transforma uma potencial catástrofe de falha de Out-Of-Memory (OOM), que derruba todo o serviço e pode corromper dados, em um erro de alocação de memória mais gerenciável (ENOMEM) para uma única conexão, preservando a integridade e a disponibilidade do banco.
O problema do OOM Killer não é exclusivo do PostgreSQL. Como noticiamos em 7 de junho de 2026 na matéria sobre a proteção nativa da Vercel contra 'out of memory' em builds, falhas por esgotamento de memória são um desafio comum que afeta diversas camadas da infraestrutura tecnológica. Para o PostgreSQL, a complexidade é maior devido à sua arquitetura de processos filhos compartilhando memória. A Ubicloud, com vasta experiência em serviços gerenciados de PostgreSQL, adota essa configuração de forma consistente, ressaltando sua importância na arquitetura de sistemas.
O que mudou
Apesar da eficácia do strict memory overcommit, ele foi temporariamente desabilitado pela Ubicloud devido a um bug crítico no kernel Linux 6.5. Esse defeito, introduzido pelo commit 408579c, causava um vazamento no contador Committed_AS, levando o sistema a relatar um uso de memória muito maior do que o real. Isso resultava em falhas de alocação mesmo com memória física disponível.
A boa notícia é que o problema foi diagnosticado, inclusive com auxílio de uma IA para analisar commits do kernel, e Linus Torvalds implementou a correção. A resolução do bug permite que a prática de strict memory overcommit seja reativada com segurança, restaurando a proteção que ela oferece para o PostgreSQL e garantindo a contabilização precisa da memória alocada, um retorno à boa prática para garantir a estabilidade em ambientes de produção.
Por que isso importa
Para o profissional de desenvolvimento, gerenciar a memória de forma proativa minimiza dores de cabeça com incidentes em produção. A adoção de strict memory overcommit é uma medida de segurança que impacta diretamente a experiência do desenvolvedor (DX) e a confiabilidade do software. Ao evitar que um OOM derrube todo o servidor PostgreSQL, ganhamos em tempo de atividade e reduzimos a complexidade da recuperação de desastres, convertendo um evento catastrófico em um erro pontual e tratável.
A configuração precisa do CommitLimit, como a heurística de 80% da memória física mais 2 GB, é um exemplo de boa prática. Ela considera não só o uso do PostgreSQL, mas também de sidecars e estruturas do kernel, evitando que processos auxiliares consumam indevidamente o orçamento de memória. Isso garante que o banco de dados tenha os recursos necessários, prevenindo interrupções e otimizando a performance, especialmente em cenários de alta demanda.
Linha do tempo
Introdução do bug no kernel Linux 6.5 pelo commit 408579c.
Linus Torvalds corrige o bug no kernel Linux 6.8 (commit df20815).
Ubicloud detalha a importância de 'strict memory overcommit' para PostgreSQL após corrigir bug no kernel.
Perguntas frequentes
O que é 'strict memory overcommit' e por que ele é importante para PostgreSQL?
É uma configuração do kernel Linux (vm.overcommit_memory=2) que impede que o sistema operacional aloque mais memória virtual do que a fisicamente disponível e comprometida. Para o PostgreSQL, isso é vital porque previne que o OOM Killer encerre processos de forma abrupta, o que poderia corromper a memória compartilhada e derrubar todo o banco de dados.
Como uma falha de Out-Of-Memory (OOM) afeta o PostgreSQL sem o 'strict overcommit'?
Sem o strict overcommit, o kernel pode invocar o OOM Killer para liberar memória, encerrando um processo de backend aleatoriamente. Isso pode deixar a memória compartilhada do PostgreSQL em um estado inconsistente, forçando o processo principal (postmaster) a encerrar todas as conexões e iniciar um longo processo de recuperação de crash para proteger a integridade dos dados.
Qual foi o problema com o 'strict overcommit' no kernel Linux 6.5?
Um bug introduzido no kernel Linux 6.5 causou uma contagem incorreta (vazamento) do Committed_AS, um indicador de memória comprometida. Esse erro levava o sistema a pensar que havia excedido seu limite de memória mesmo com recursos físicos disponíveis, resultando em falhas prematuras de alocação de memória e a necessidade de desabilitar temporariamente o strict overcommit.
Como o <code>CommitLimit</code> deve ser configurado para o PostgreSQL?
A Ubicloud recomenda uma heurística de 80% da memória física total, mais 2 GB. Os 20% restantes acomodam estruturas internas do kernel e são usados para cache de página. Os 2 GB adicionais são para processos sidecar (como Prometheus e Wal-G) que podem inflar o Committed_AS, garantindo que o PostgreSQL tenha o orçamento de memória necessário.
Fontes
- ubicloud.comfonte original
- Categoria
- CEVIU Web Dev
- Publicado
- 11 de julho de 2026
- Editoria
- CEVIU Web Dev

