← Voltar ao Encontro 10
Sistemas Operacionais · ADS23
01 / 14
Encontro 10 de 17

Memória virtual,
paginação e limites
em container

O mecanismo que explica por que uma máquina "engasga" sem estar com a CPU cheia — e como impor tetos de memória a um container de forma consciente.

ADS23IFCE Campus HorizonteProf. José Stelio Sampaio Bastos Neto
↓ role pra avançar · use os pontos à direita pra navegar direto
De onde viemos

Vocês já viram o sintoma. Hoje: o mecanismo.

Encontro 9

A memória acaba e o processo morre

Vazamento, swap, OOM Killer — e o container morto com código 137 por estourar o próprio limite.

Hoje

Como o SO faz a memória "render"

Paginação é o truque que permite rodar mais coisa do que cabe na RAM — e também a explicação de por que, em excesso, tudo fica lento.

Pergunta pra turma

A CPU está em 15%.
A aplicação quase não lê nem grava arquivos.
E mesmo assim a máquina está insuportavelmente lenta.

Nada parece sobrecarregado — e nada responde. Onde está o gargalo?

Conceito-base

Paginação: memória em pedaços de tamanho fixo

Em vez de tratar a memória de um processo como um bloco contínuo, o SO a divide em páginas de tamanho fixo (tipicamente 4 KB). A RAM é dividida em molduras do mesmo tamanho, e o SO mantém uma tabela dizendo qual página está em qual moldura.

Espaço de endereçamento do processo — páginas 0, 1, 2, 3, 4…
↕
Tabela de páginas — o mapa: página → moldura (ou "está no disco")
↕
RAM física — molduras, nem todas ocupadas pelo mesmo processo

A consequência prática é poderosa: nem toda página precisa estar na RAM ao mesmo tempo.

O que acontece quando falta

Page fault: a página pedida não está na RAM

Quando o processo acessa uma página que não está carregada, o hardware interrompe a execução e o SO assume: busca a página no disco, coloca numa moldura livre, atualiza a tabela, e devolve o controle ao processo — que nem percebe que isso aconteceu.

Page fault não é erro — é operação normal. O problema é a frequência dos que precisam ir ao disco: cada um desses custa um acesso milhares de vezes mais lento que a RAM.

Voltando à pergunta do começo

Thrashing: quando o SO só troca páginas e não trabalha

Se há processos demais para a RAM disponível, o SO passa a expulsar páginas que serão pedidas de volta em seguida. O resultado é um ciclo vicioso: page fault → carrega do disco → expulsa outra página → novo page fault.

Sintoma

Máquina lentíssima, CPU baixa (ela está esperando disco, não calculando), e um volume alto e constante de E/S de swap.

Causa e correção

Carga de trabalho maior do que a RAM comporta. Corrige-se reduzindo processos simultâneos, aumentando RAM ou impondo limites por serviço.

Era essa a resposta do slide 2: CPU baixa não significa máquina ociosa — pode significar que ela está travada esperando disco.

Fechando o ciclo do Encontro 9

Swap não é vilão — uso excessivo de swap é sintoma

Swap é a área de disco usada para guardar páginas expulsas da RAM. Ter swap é saudável: dá folga ao sistema em picos e permite que páginas realmente ociosas saiam do caminho.

SituaçãoInterpretação
Swap alocado, pouca E/SNormal — páginas ociosas guardadas, sem custo de desempenho
Swap crescendo devagarAtenção — carga aumentando, vale investigar
E/S de swap alta e constanteThrashing — a máquina está gastando tempo trocando páginas

Ou seja: não olhe só "quanto swap está em uso" — olhe quanta troca está acontecendo.

Por que isso importa pra quem trabalha com software

O diagnóstico que quase ninguém sabe fazer

Diagnóstico errado

"A CPU está baixa, então o problema não é o servidor"

Conclusão comum e enganosa — leva a equipe a procurar o problema na aplicação, no banco, na rede, e a perder horas.

Diagnóstico certo

"CPU baixa + swap trocando muito = falta de RAM"

Reconhecer thrashing em minutos, em vez de horas, é uma vantagem concreta em sustentação e cloud.

Eixo do curso

Por que impor limites de memória a um container

No Encontro 9 vocês viram o limite matar um container. Isso pode parecer ruim — mas é exatamente o objetivo: transformar uma falha global e imprevisível numa falha local e previsível.

Sem limite

Um serviço com vazamento consome toda a RAM da máquina, força thrashing, e degrada todos os outros serviços antes de alguém perceber.

Com limite

O serviço problemático morre sozinho, é reiniciado pelo orquestrador, e os demais seguem intactos. O incidente fica contido e visível.

Na prática

As opções que você realmente vai usar

OpçãoO que faz
--memoryTeto de memória RAM do container. Ao ultrapassar, o processo é morto (OOM)
--memory-swapTeto de memória + swap somados. Igualar ao --memory desabilita swap para aquele container
docker statsAcompanha o consumo contra o limite definido, ao vivo (visto no Encontro 6)

Por baixo dos panos, é o mesmo mecanismo de cgroups do kernel Linux que vocês viram de relance lá no Encontro 2 — agora com um uso concreto.

Calibragem desta disciplina

O que deliberadamente não vamos aprofundar

Os livros de SO dedicam várias páginas aos algoritmos de substituição de página — as regras que decidem qual página expulsar quando a RAM enche (LRU, FIFO, relógio, e outros).

Por que existe

É conteúdo de quem constrói um SO

Fundamental para engenharia de sistemas operacionais e pesquisa — implementar o kernel exige escolher e otimizar esses algoritmos.

Por que não aqui

Não muda sua ação como profissional de ADS

Saber que a expulsão acontece e reconhecer thrashing muda seu diagnóstico. Saber qual algoritmo específico o kernel usa, não.

Fica registrado como leitura opcional para quem tiver interesse — mas não é cobrado nesta disciplina.

Prévia da prática

Observando page faults e swap ao vivo

Uma sequência real: contar page faults de um processo, acompanhar a troca de páginas com vmstat, e comparar dois containers com limites diferentes.

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

Mão na massa

De contar page faults a dimensionar um container

DIAGNÓSTICO

Page faults, swap e vmstat

Medir page faults de um comando, ler as colunas de swap do vmstat e interpretar o que elas dizem.

REFORÇO DOCKER

Dimensionar limite de memória

Descobrir empiricamente o limite mínimo viável para um container, em vez de chutar.

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

Para ler

Leitura da semana

🔵

Tanenbaum — Paginação

O mecanismo que explica por que a máquina "engasga" — a leitura principal de hoje. p. 134–136

🟢

Laureano — Utilizando o /proc (releitura de apoio)

As mesmas páginas do Encontro 9, agora com novos olhos: você já sabe o que é page fault. p. 94–98

⚪

Tanenbaum — Paginação completa + Controle de carga (thrashing)

Aprofundamento para quem quiser ir além do recorte obrigatório. p. 134–144 e 155–156

✋

Fora do escopo: Algoritmos de substituição de páginas (3.4)

Decisão de calibragem desta disciplina — relevante para engenharia de SO, não para o perfil ADS. Não é cobrado.

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