Pular para o conteúdo principal

Lab 2.2 - Análise da Gestão de Memória

Objetivos​

Ao final deste lab, você será capaz de:

  • Analisar o uso da memória
  • Compreender o swap
  • Monitorar a memória por processo
  • Identificar vazamentos de memória
  • Otimizar o uso da memória

Pré-requisitos​

  • Sistema Linux funcional
  • Acesso root ou sudo
  • Terminal aberto

Exercício 1: Informações Básicas de Memória​

Etapa 1: Visão Geral​

# Informações completas de memória
free -h

# Informações detalhadas
cat /proc/meminfo

# Visão simples
free

Pergunta: Quanto de RAM você possui? Quanto está em uso?

Etapa 2: Análise Detalhada​

# Ver todas as informações
cat /proc/meminfo | head -20

# Memória total
grep MemTotal /proc/meminfo

# Memória livre
grep MemFree /proc/meminfo

# Memória disponível (diferente de livre)
grep MemAvailable /proc/meminfo

Explicação:

  • MemTotal: RAM total
  • MemFree: RAM completamente livre
  • MemAvailable: RAM disponível para novos processos (inclui cache recuperável)

Exercício 2: Swap​

Etapa 1: Informações de Swap​

# Ver o swap
swapon --show

# Detalhes do swap
cat /proc/swaps

# Uso do swap
free -h | grep Swap

Etapa 2: Criar um Arquivo de Swap (Opcional)​

# Criar um arquivo de 1GB para swap
sudo fallocate -l 1G /swapfile

# Permissões seguras
sudo chmod 600 /swapfile

# Formatar como swap
sudo mkswap /swapfile

# Ativar
sudo swapon /swapfile

# Verificar
swapon --show

Etapa 3: Swap Permanente​

# Adicionar ao /etc/fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# Verificar
cat /etc/fstab | grep swap

Exercício 3: Memória por Processo​

Etapa 1: Maiores Consumidores​

# Top 10 processos por uso de memória
ps aux --sort=-%mem | head -11

# Com detalhes
ps aux --sort=-%mem -o pid,user,%mem,%cpu,cmd | head -11

Etapa 2: Memória de um Processo Específico​

# Encontrar um processo (ex: firefox)
ps aux | grep firefox

# Ver a memória de um PID
cat /proc/<PID>/status | grep -E 'VmSize|VmRSS|VmData'

# Ou com pmap
pmap <PID>

Explicação:

  • VmSize: Tamanho virtual total
  • VmRSS: RAM física utilizada
  • VmData: Memória de dados

Etapa 3: Script de Análise​

# Criar um script
cat > mem-analysis.sh << 'EOF'
#!/bin/bash
echo "=== Top 5 Processos de Memória ==="
ps aux --sort=-%mem | head -6
echo
echo "=== Uso de Memória ==="
free -h
echo
echo "=== Swap ==="
swapon --show
EOF

chmod +x mem-analysis.sh
./mem-analysis.sh

Exercício 4: Monitoramento em Tempo Real​

Etapa 1: vmstat​

# Estatísticas a cada segundo
vmstat 1

# 10 amostras
vmstat 1 10

# Interpretar as colunas:
# - swpd: Swap utilizado
# - free: Memória livre
# - buff: Buffer cache
# - cache: Page cache
# - si/so: Swap in/out

Etapa 2: sar (se instalado)​

# Instalar sysstat
sudo apt install sysstat

# Estatísticas de memória
sar -r 1 10

# Histórico
sar -r

Etapa 3: Script de Monitoramento​

# Monitoramento contínuo
watch -n 1 'free -h && echo && ps aux --sort=-%mem | head -6'

Exercício 5: Detecção de Vazamentos de Memória​

Etapa 1: Monitoramento Contínuo​

# Criar um script de monitoramento
cat > mem-watch.sh << 'EOF'
#!/bin/bash
while true; do
clear
echo "=== $(date) ==="
free -h
echo
echo "=== Top 5 Memória ==="
ps aux --sort=-%mem | head -6
sleep 2
done
EOF

chmod +x mem-watch.sh
# Rodar: ./mem-watch.sh

Etapa 2: Análise de um Processo​

# Acompanhar a evolução da memória de um processo
watch -n 1 'ps -p <PID> -o pid,%mem,%cpu,rss,vsz,cmd'

Etapa 3: Alertas​

# Script de alerta se memória > 80%
cat > mem-alert.sh << 'EOF'
#!/bin/bash
THRESHOLD=80
MEM_USED=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
if [ "$MEM_USED" -gt "$THRESHOLD" ]; then
echo "ALERTA: Memória em ${MEM_USED}%"
ps aux --sort=-%mem | head -6
fi
EOF

chmod +x mem-alert.sh
./mem-alert.sh

Exercício 6: Otimização de Memória​

Etapa 1: Limpar o Cache (Atenção!)​

# Ver o cache
free -h

# Limpar o cache (se realmente necessário)
# ATENÇÃO: Pode deixar o sistema temporariamente mais lento
sudo sync
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'

# Verificar
free -h

Etapa 2: Ajustar Swappiness​

# Ver swappiness atual
cat /proc/sys/vm/swappiness

# Alterar temporariamente (0-100, menor = menos swap)
sudo sysctl vm.swappiness=10

# Permanente: /etc/sysctl.conf
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

Etapa 3: Limites de Memória​

# Ver os limites de um processo
cat /proc/<PID>/limits | grep memory

# Limitar com systemd
systemd-run --slice=my-slice --property=MemoryLimit=512M comando

Verificação​

Checklist​

Verifique se você consegue:

  • Ver o uso total e disponível de memória
  • Analisar o swap
  • Identificar os processos que mais consomem memória
  • Monitorar a memória em tempo real
  • Detectar problemas de memória
  • Ajustar os parâmetros de memória

Perguntas para Reflexão​

  1. Qual a diferença entre MemFree e MemAvailable?

    • MemFree: Memória completamente livre
    • MemAvailable: Memória disponível (inclui cache recuperável)
  2. Quando o swap é utilizado?

    • Quando a RAM física está saturada
    • O kernel move páginas inativas para o swap
  3. Por que limpar o cache pode ser perigoso?

    • O cache melhora a performance
    • Limpá-lo pode deixar o sistema temporariamente mais lento

Próximos Passos​

  • Lab 2.3: Monitoramento Avançado de Sistema
  • Capítulo 2.4: Sistema de Arquivos Virtual (VFS)
  • Capítulo 2.5: Gestão de Processos

Lab criado em: Dezembro 2024