Gerenciamento de Memória e Processos no Linux

Introdução

memória Linux. O Linux gerencia processos e memória de forma eficiente, combinando RAM física, swap e mecanismos internos como heap, stack e OOM Killer. Entender como isso funciona é essencial para administradores de servidores e desenvolvedores que buscam performance e estabilidade.


1. O que são processos no Linux

Um processo é um programa em execução, identificado por:

  • PID (Process ID): identificador único
  • PPID (Parent PID): processo pai
  • Estado: R (running), S (sleeping), Z (zombie), D (uninterruptible sleep)
  • Memória alocada: heap, stack e memória compartilhada

Comandos úteis:

ps aux        # lista todos os processos
top           # monitoramento em tempo real
htop          # versão amigável do top
pstree        # processos em árvore
kill PID      # termina um processo
kill -9 PID   # força a finalização

2. Estrutura de memória de um processo

Cada processo possui espaço de memória virtual, dividido em:

  • Text (código) – instruções do programa
  • Data (dados estáticos) – variáveis globais
  • BSS (dados não inicializados) – variáveis globais sem valor
  • Heap – memória dinâmica (malloc, new)
  • Stack – variáveis locais e chamadas de função

Visualização simplificada:

|------------------|
| Kernel Space      |
|------------------|
| Stack             | <- cresce para baixo
|------------------|
| Heap              | <- cresce para cima
|------------------|
| BSS               |
| Data              |
| Text              |
|------------------|
| Kernel Space      |

3. Gerenciamento de memória no Linux

O Linux combina RAM e swap, controlando:

  • Alocação de páginas (4 KB)
  • Cache e buffers do kernel
  • Memória compartilhada

Comando para visualizar memória:

free -h

Exemplo:

              total        used        free      shared  buff/cache   available
Mem:           16G         8G         4G          0G         4G         7G
Swap:           2G         0G         2G

4. OOM Killer

Quando RAM e swap se esgotam, o Linux ativa o OOM Killer, que encerra processos para liberar memória e evitar travamentos.

Monitoramento em tempo real:

vmstat 2
top

5. Swappiness

Define a tendência de usar swap:

cat /proc/sys/vm/swappiness  # verifica
sudo sysctl vm.swappiness=10 # ajusta temporariamente
  • 0 → evita swap ao máximo
  • 100 → usa swap agressivamente

Alteração permanente no /etc/sysctl.conf:

vm.swappiness = 10

6. Monitoramento e prevenção de memory leak

  • Memory leak: memória alocada e não liberada
  • Comandos para identificar consumo:
ps aux --sort=-%mem | head   # top 10 por memória
smem                          # uso detalhado
pmap PID                      # mapa de memória do processo

7. Otimização prática

  1. Monitore processos com htop ou glances
  2. Limite memória de serviços com systemd ou cgroups
  3. Configure swap estrategicamente
  4. Configure alertas de memória para evitar OOM Killer
  5. Limpe cache quando necessário:
sudo sync; echo 3 > /proc/sys/vm/drop_caches

FAQ

O que é um processo no Linux?

Um processo é um programa em execução, com PID, estado e memória alocada.

Qual a diferença entre RAM e swap?

A RAM é memória física usada pelos processos, enquanto swap é espaço em disco usado quando a RAM se esgota.

O que é o OOM Killer?

Mecanismo do Linux que finaliza processos quando a memória está esgotada, evitando travamentos.

Como monitorar uso de memória?

Comandos como top, htop, free -h, vmstat e pmap ajudam a analisar consumo.

O que são heap e stack?

Heap é memória para alocação dinâmica, stack guarda variáveis locais e chamadas de função.