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
-
Qual a diferença entre MemFree e MemAvailable?
- MemFree: Memória completamente livre
- MemAvailable: Memória disponível (inclui cache recuperável)
-
Quando o swap é utilizado?
- Quando a RAM física está saturada
- O kernel move páginas inativas para o swap
-
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