Monitoramento de Performance e Gerenciamento de Processos no Linux

Diagnóstico Contínuo de Recursos Computacionais

A estabilidade de servidores em produção depende diretamente da capacidade de identificar gargalos antes que impactem a disponibilidade dos serviços. Quando ocorre degradação no tempo de resposta, consumo anômalo de memória RAM ou picos no processamento, a resolução eficiente exige o uso estratégico de utilitários nativos para rastrear a alocação de recursos e o comportamento das tarefas em execução.

Ferramentas de Coleta de Métricas em Tempo Real

Monitoramento Interativo com top e htop

O utilitário top gera instantâneos dinâmicos do estado do kernel, exibindo o consumo de processador, memória e swap de forma contínua. Para refinar a observação, é possível filtrar por usuário ou atualizar a taxa de amostragem.

top -u operador -d 3
top -p 1402,1405

A interface exibe parâmetros críticos para avaliação imediata:

Indicador Descrição Faixa de Referência
load average Média de processos aguardando execução (1, 5, 15 min) Inferior ao total de núcleos lógicos
wa (iowait) Tempo de CPU inativa aguardando operações de disco Próximo de zero
si/so Troca de dados entre RAM e área de swap Zero ou valores constantes baixos
id Porcentagem de processador ocioso Superior a 30% em condições normais

Como alternativa visual, o htop oferece navegação por teclado, suporte a mouse e visualização em árvore, facilitando a identificação de hierarquias de processos e a aplicação direta de sinais de controle.

sudo apt install htop   # Distribuições baseadas em Debian
sudo dnf install htop   # Distribuições baseadas em RHEL/Fedora
htop -d 50

Estatísticas de Memória Virtual e Blocos

O vmstat compila dados consolidados sobre memória, filas de processos e atividade de dispositivos de bloco. A execução periódica permite detectar tendências de degradação antes de falhas.

vmstat 5 4

Colunas essenciais para aálise:

  • r: Processos aguardando tempo de CPU na fila de execução.
  • b: Processos em estado de sono ininterrupto, geralmente aguardando I/O.
  • free / buff / cache: Capacidade RAM disponível sem contar buffers temporários do kernel.
  • bo / bi: Blocos enviados/recebidos por dispositivos de armazenamento por segundo.

Inspeção de RAM e I/O de Disco

Para verificação direta da alocação de memória, o free apresenta dados consolidados. A opção --available é mais precisa que o espaço livre bruto para estimar capacidade real para novas aplicações.

free -m -w
free -s 10

No quesito armazenamento, o iostat (parte do pacote sysstat) expõe métricas detalhadas de leitura/escrita e tempos de resposta dos dispositivos.

iostat -xz 3

Observe o campo %util (saturação do dispositivo) e await (latência média em ms). Valores de utilização próximos a 100% ou latências acima de 50ms geralmente indicam estrangulamento físico.

Controle e Inspeção de Tarefas em Execução

Instantâneos e Hierarquia de Processos

O ps captura o estado atual do gerenciador de tarefas. A formatação personalizada permite filtrar e ordenar dados relevantes.

ps -eo pid,user,vsz,rss,%mem,%cpu,cmd --sort=-%rss | head -12
ps -ef --forest -u daemon_user

Campos-chave: VSZ (memória virtual alocada), RSS (memória física residente), STAT (estado atual: R, S, D, Z, T) e TIME (acumulado de processamento).

Para visualizar dependências entre tarefas, o pstree mapeia as relações de criação:

pstree -p -c -u 2050

Gerenciamento de Sinais e Prioridade

A interrupção de tarefas é realizada através do envio de sinais POSIX. O padrão (SIGTERM 15) solicita encerramento gracioso, enquanto o sinal 9 (SIGKILL) força a remoção imediata.

kill -15 8842
kill -9 8842
pkill -f "java -jar app.jar"
pkill -U operador

O escalonador do kernel utiliza valores de nice (de -20 a 19) para definir preferência de CPU. Processos com valores menores recebem mais tempo de processamento.

nice -n 18 backup_full.sh
renice -n -5 -p $(pgrep -o data_processor)

Diagnóstico Avançado e Histórico

Registro de Atividades do Sistema

O sar (também do sysstat) mantém logs históricos de desempenho, permitindo aálise retroativa sem monitoramento contínuo ativo.

sar -u -f /var/log/sysstat/sa$(date +%d)
sar -r 10
sar -n DEV 2 5

Rastreamento de Arquivos e Sockets

O lsof lista descritores de arquivo abertos por processos, útil para identificar conflitos de portas ou arquivos bloqueados.

lsof -iTCP:443 -sTCP:LISTEN
lsof -p $(pgrep nginx) +D /var/www

Para auditoria de conexões de rede, o ss substitui o legado netstat, oferecendo melhor performance na leitura direta de estruturas do kernel:

ss -tulpn
ss -s
ss -4 state established '( dport = :3306 or sport = :3306 )'

Fluxos de Investigação de Anomalias

Cenário A: Pico de Utilização de CPU

# 1. Verificar médias de carga e núcleos lógicos
nproc
uptime

# 2. Isolar os consumidores ativos
top -bcn1 | grep -i "java\|python\|node" | head -5

# 3. Analisar chamadas de sistema e interrupções
pidstat -u 1 5 -p 4410
perf record -F 99 -p 4410 -g -- sleep 10

Cenário B: Consumo Gradual de RAM

# 1. Observar crescimento de buffers e cache
watch -n 3 "free -m | grep Mem"

# 2. Identificar ocupantes da memória física
smem --sort rss -r -t -k | head -8

# 3. Inspecionar mapas de alocação
cat /proc/3180/smaps_rollup

Cenário C: Degradação de Leitura/Gravação

# 1. Monitorar filas de I/O
iostat -dx 2 | grep -E "Device|sda"

# 2. Visualizar tarefas com maior atividade de disco
iotop -oP -b -n 5

# 3. Rastrear acesso a arquivos específicos
strace -e trace=openat,read,write -p 7723

Automação de Coleta e Vigilância

Script de Auditoria de Recursos

#!/usr/bin/env bash
# audit_metrics.sh

METRIC_LOG="/var/log/resource_audit.log"
LIMIT_PROC=92
LIMIT_STORAGE=88

fetch_cpu() {
  mpstat 1 1 | awk '/Average/ {print 100 - $NF}'
}

fetch_ram() {
  free -m | awk '/Mem:/ {printf "%.0f", ($3/$2)*100}'
}

fetch_disk() {
  df / | awk 'NR==2 {gsub(/%/,""); print $5}'
}

cpu_val=$(fetch_cpu)
ram_val=$(fetch_ram)
disk_val=$(fetch_disk)

timestamp=$(date +"%Y-%m-%d %H:%M:%S")
printf "[%s] CPU:%s%% MEM:%s%% DISK:%s%%\n" "$timestamp" "$cpu_val" "$ram_val" "$disk_val" >> "$METRIC_LOG"

(( $(echo "$cpu_val > $LIMIT_PROC" | bc -l) )) && echo "ALERTA CPU" >> "$METRIC_LOG"
(( ram_val > LIMIT_STORAGE )) && echo "ALERTA MEMÓRIA" >> "$METRIC_LOG"

Script de Recuperação de Serviço

#!/usr/bin/env bash
# service_guard.sh

TARGET_DAEMON="postgresql"
HEALTH_LOG="/var/log/daemon_watch.log"
MAX_CYCLES=5
SLEEP_DURATION=45
failures=0

while true; do
  if ! systemctl is-active --quiet "$TARGET_DAEMON"; then
    ((failures++))
    echo "[$(date)] Falha detectada. Tentativa de reinício: $failures/$MAX_CYCLES" >> "$HEALTH_LOG"
    
    if [ $failures -le $MAX_CYCLES ]; then
      systemctl restart "$TARGET_DAEMON" 2>&1 | tee -a "$HEALTH_LOG"
    else
      echo "[$(date)] Limite de recuperação atingido. Notificando administradores." >> "$HEALTH_LOG"
      exit 1
    fi
  else
    failures=0
  fi
  
  sleep "$SLEEP_DURATION"
done

Diretrizes de Ajuste Fino

Otimização de Processamento

  • Fixação de afinidade: Utilize taskset -c 0-3 comando para restringir a execução a núcleos físicos específicos, evitando migração de contexto desnecessária.
  • Balenceamento de IRQs: Ative o serviço irqbalance para distribuir interrupções de hardware uniformemente entre os processadores.
  • Flags de compilação: Em builds críticos, empregue -O3 -march=native -flto para gerar binários adaptados à microarquitetura local.

Ajuste de Alocação de Memória

  • Comportamento do Swap: Modifique vm.swappiness (valores entre 1 e 100). Valores mais baixos (10) priorizam a RAM física, recomendados para bancos de dados.
  • Gerenciamento de Cache: Ajuste vm.vfs_cache_pressure para controlar a agressividade na liberação de inodes e dentries.
  • Huge Pages: Habilite páginas de 2MB para aplicações com grandes footprints de RAM, reduzindo a sobrecarga da TLB (Translation Lookaside Buffer).

Eficiência de Armazenamento

  • Escalonadores de Bloco: Prefira mq-deadline ou none para NVMe/SSD modernos, enquanto bfq pode beneficiar discos mecânicos com múltiplas leituras.
  • Opções de Montagem: Aplique noatime,nodiratime,discard em sistemas de arquivos ext4/XFS em SSDs para reduzir escritas desnecessárias de metadados e ativar o TRIM.
  • Cache de Página: Configure vm.dirty_ratio e vm.dirty_background_ratio para definir quando o kernel deve iniciar o flush de dados pendentes para o disco.

Tags: linux-admin Performance-Tuning process-monitoring system-diagnostics bash-automation

Publicado em 8-16 21:53