← Voltar ao Encontro 9
Sistemas Operacionais · ADS23
01 / 14
Encontro 9 de 17 · Abertura da Unidade IV

Memória na prática:
consumo, vazamento e OOM

Por que uma aplicação que rodava bem começa a engasgar depois de dias no ar — e como o SO decide quem morre quando a memória acaba.

ADS23IFCE Campus HorizonteProf. José Stelio Sampaio Bastos Neto
↓ role pra avançar · use os pontos à direita pra navegar direto
Nova etapa, mesmo eixo

Fechamos processos. Agora: o recurso que eles disputam.

1ª etapa

Processos: quem roda e como

PID, estados, escalonamento, concorrência — tudo sobre quem usa a CPU e quando.

2ª etapa

Memória e E/S: com o que rodam

Todo processo precisa de memória e de disco. Quando qualquer um dos dois acaba ou fica lento, a aplicação sofre — e você precisa saber diagnosticar.

O eixo do curso continua: containers seguem presentes, agora com um ângulo novo — limites de memória.

Pergunta pra turma

Sua API subiu na sexta consumindo 200 MB.
Na segunda, está em 3 GB — sem nenhum deploy novo.
O que aconteceu?

Ninguém mexeu no código. O tráfego foi normal. E mesmo assim a memória só subiu.

Conceito-base

Cada processo enxerga "sua própria" memória

O SO dá a cada processo um espaço de endereçamento — a ilusão de ter a memória inteira só pra si. Dois processos podem usar o "endereço 1000" ao mesmo tempo, e são lugares fisicamente diferentes.

Processo A
endereço 1000
Processo B
endereço 1000
SO — traduz endereços virtuais em endereços físicos
Memória física (RAM) — lugares diferentes para cada um

É isso que impede um processo de ler ou corromper a memória de outro — o mesmo isolamento que vocês já viram no namespace de PID do Encontro 5, agora aplicado à memória.

Lendo os números certos

"Memória usada" não é um número só

A confusão mais comum de quem começa: olhar o total de memória "usada" e entrar em pânico. O Linux usa memória livre como cache de disco de propósito — isso é bom, não é vazamento.

CampoO que significaDevo me preocupar?
totalMemória física instaladaReferência, só isso
usedEm uso por processos + kernelSozinho, não diz muito
buff/cacheCache de disco — devolvido quando alguém precisarNão. É desejável estar alto
availableQuanto realmente dá pra alocar agoraSim — este é o número que importa
Voltando à pergunta do começo

Vazamento de memória: alocar e nunca devolver

Um vazamento acontece quando o programa pede memória ao SO e, por um erro de lógica, nunca libera — mesmo já não precisando mais dela. A cada requisição atendida, o consumo sobe um pouco e nunca desce.

Como reconhecer

Consumo que só cresce ao longo do tempo, sem estabilizar — e que só volta ao normal quando o processo é reiniciado.

Como diagnosticar

Acompanhar a memória do processo ao longo de horas/dias (não num instante só) e comparar com o padrão de tráfego.

A "solução" preguiçosa que muita equipe adota — reiniciar o serviço toda madrugada — é justamente o sintoma de um vazamento não corrigido.

O limite

Quando a memória acaba de verdade

Antes de desistir, o SO tem uma carta na manga: mover para o disco (swap) as partes da memória que estão paradas há mais tempo, liberando RAM para quem precisa agora.

Swap

Memória emprestada do disco

Funciona, mas o disco é ordens de grandeza mais lento que a RAM — é por isso que a máquina "engasga" quando começa a usar swap pesado.

OOM Killer

O último recurso do kernel

Se nem com swap houver memória, o kernel escolhe um processo e o mata — sem aviso, sem chance de salvar estado.

O assassino do kernel

OOM Killer: como o SO escolhe a vítima

Quando não há mais memória, o kernel precisa matar alguém para o sistema inteiro não travar. Ele pontua cada processo e mata o de maior pontuação.

"O container morreu do nada" quase sempre é OOM. Saber ler esse log é o que separa o chute do diagnóstico.

Por que isso importa pra quem trabalha com software

Três situações reais que esta aula explica

Sustentação

"O serviço cai toda madrugada"

Vazamento acumulando até estourar o limite — o reinício programado é paliativo, não correção.

Cloud / DevOps

"O container reinicia sozinho"

Limite de memória do container atingido, OOM dispara, orquestrador sobe outro no lugar.

Em ambos, o diagnóstico começa exatamente pelos comandos que vocês vão rodar hoje.

A fonte da verdade

Tudo isso está em /proc — como sempre

Do Encontro 2 até aqui, o /proc não mudou de papel: é a janela do kernel. Para memória, os arquivos que interessam são poucos e diretos.

CaminhoO que mostra
/proc/meminfoVisão global da memória — o que o free -h resume
/proc/<pid>/statusMemória daquele processo específico (campos VmRSS, VmSize)
/proc/swapsÁreas de swap ativas e quanto de cada uma está em uso

Comandos como free e top são, de novo, apenas leitores organizados desses arquivos.

Eixo do curso

Um container pode ter seu próprio limite de memória

Aqui o Docker deixa de ser só empacotamento e vira ferramenta de controle de recurso: você define quanta memória aquele container pode usar, e o kernel faz valer.

Sem limite

O container usa o que quiser

Um vazamento dentro do container pode derrubar a máquina inteira, afetando todos os outros serviços.

--memory

O estrago fica contido

Ao estourar o limite, o OOM mata só o processo daquele container — o resto da máquina continua de pé.

Vocês vão provocar exatamente esse cenário hoje: um container com limite baixo, consumindo memória de propósito até morrer.

Prévia da prática

Do free -h ao container morto por OOM

Uma sequência real: ler a memória do sistema, acompanhar o consumo de um processo, e ver um container estourar o próprio limite.

Cada uma dessas linhas vira um passo do roteiro de laboratório de hoje.

Mão na massa

De ler a memória a provocar um OOM

DIAGNÓSTICO

Ler memória do sistema e de um processo

free -h, /proc/meminfo, /proc/<pid>/status e o top ordenado por memória.

REFORÇO DOCKER

Container com limite + OOM ao vivo

Subir um container com --memory baixo e provocar o estouro de propósito.

O roteiro de laboratório detalha os passos, com dicas se algo travar.

Para ler

Leitura da semana

🟢

Laureano — Utilizando o /proc

O meminfo e sua vizinhança, direto do laboratório — a base prática de hoje. p. 94–98

🔵

Tanenbaum — A noção de um espaço de endereçamento + Swapping

Por que cada processo enxerga "sua" memória, e o que o SO faz quando ela acaba. p. 128–131

⚪

Tanenbaum — Sem abstração de memória

Como era o mundo antes do espaço de endereçamento — bom pra dimensionar o problema que ele resolve. p. 125–128

O quiz da semana verifica essa leitura e recolhe suas observações da prática — tudo no mesmo instrumento.