Como monitorar processos e recursos no Linux com ferramentas nativas


Como monitorar processos e recursos no Linux com ferramentas nativas

by Admin, in Geral


Posted on April 25, 2026 at 11:26 AM

# Como monitorar processos e recursos no Linux com ferramentas nativas Em um ambiente de desenvolvimento e operação, especialmente quando lidamos com sistemas Linux, a estabilidade e o desempenho são fundamentais. Problemas como processos indesejados, consumo excessivo de memória ou CPU, ou até mesmo travamentos podem surtir efeitos imediatos, impactando tanto a produtividade quanto a confiabilidade das aplicações. Diagnosticar e mitigar esses problemas rapidamente é uma parte essencial do dia a dia, e o Linux, embora poderoso, exige que entendamos seu funcionamento interno e o estado dos recursos em tempo real. É por isso que contar com ferramentas nativas, integradas ao sistema, se torna crucial. Elas oferecem visibilidade direta e granular sobre o que está acontecendo, permitindo monitorar processos, memória, disco, rede e muito mais. Usar essas ferramentas nativas não apenas evita a complexidade e possíveis incompatibilidades de soluções externas, mas também proporciona controle mais profundo e uma base sólida para entender o comportamento do sistema, seja durante o desenvolvimento, testes ou a operação em produção. Conhecer e dominar `ps`, `top`, `htop`, `vmstat`, `iotop`, `netstat`, entre outros, é uma habilidade técnica essencial para qualquer profissional que trabalha com Linux. ## Como identificar processos com alto consumo de CPU usando o comando `top`? O comando `top` é um dos principais utilitários de monitoramento em tempo real do sistema Linux. Ele fornece uma visão dinâmica dos processos em execução, destacando os que mais consomem os recursos, especialmente a CPU. Sua interface interativa permite uma exploração detalhada. ### Detalhando a tela do `top` Ao executar `top`, você verá inicialmente uma linha de status e métricas do sistema: ``` top - 14:30:00 12/05/2024 14:30:00 system load average: 1.23, 0.98, 0.75 Total Processes: 256 Running Processes: 58 Sleeping Processes: 120 Stopped Processes: 2 Zombie Processes: 1 %Cpu(s): 15.6% us, 3.2% sy, 0.5% ni, 80.7% id, 0.0% wa, 0.0% hi, 0.0% si, 0.0% st %Mem: 2450.0/4095.0/1645.0 Swap: 2048.0/5120.0/3072.0 Kernel: 5.4.0-48-generic Uptime: 2 days, 4 hours, 15 minutes Tasks: 256 total, 58 running, 120 sleeping, 2 stopped, 1 zombie Load average: 1.23, 0.98, 0.75 ``` Esta linha inicial mostra o carregamento da CPU, memória, swap e informações de tempo de atividade. A seguir, a lista principal de processos é exibida, com colunas que incluem: - **PID**: Identificação numérica do processo. - **USER**: Usuário que iniciou o processo. - **PR**: Prioridade do processo (menores valores têm maior prioridade). - **NI**: Nível de prioridade ajustado manualmente (positivo diminui prioridade, negativo aumenta). - **VIRT**: Memória virtual total consumida pelo processo. - **RES**: Memória física (residente) utilizada. - **SHR**: Parte da memória compartilhada. - **%CPU**: Porcentagem da CPU consumida pelo processo (valor alto aqui é o nosso foco). - **%MEM**: Porcentagem de memória física utilizada. - **TIME**: Tempo total de CPU consumido pelo processo. - **COMMAND**: Nome do comando/processo. ### Navegando e Interagindo com o `top` O `top` é interativo. Algumas teclas úteis são: - **Enter/Return**: Atualizar a lista de processos. - **h / help**: Mostrar ajuda sobre as teclas disponíveis. - **k**: Habilitar o kill/recolhimento de um processo (precisa especificar PID ou %CPU). - **r**: Repriorizar um processo (precisa especificar PID). - **R**: Inverter a ordem de exibição dos processos (útil para ver processos com %CPU baixo). - **M**: Ordenar processos pela memória usada (%MEM). - **P**: Ordenar processos pela porcentagem de CPU (%CPU) – geralmente usamos isso para focar no consumo de CPU. ### Identificando Processos Problemáticos Para encontrar processos com alto consumo de CPU: 1. Execute `top`. 2. Pressione `P` (ou `M` se quiser focar na memória) para ordenar os processos pela coluna de interesse. 3. Observe a coluna `%CPU`. Valores próximos a 100% (ou significativamente altos, dependendo da configuração do sistema) indicam consumo excessivo. 4. Verifique também a coluna `%MEM` para processos que consomem muita memória, pois isso pode levar ao uso excessivo de swap e impactar o desempenho da CPU. ### Ações a Tomar * **Diagnosticar**: Se encontrar um processo com alto `%CPU`, verifique o comando na coluna `COMMAND`. Se for um processo conhecido (como `httpd`, `mysql`, `python`), pode ser necessário investigar mais profundamente (usando `ps aux | grep `, por exemplo). * **Interromper**: Se o processo for indesejado ou mal comportado, você pode tentar interrompê-lo: - Pressione `k`, digite o PID do processo e pressione Enter. Isso habilita a recolher (kill) o processo. - Especifique um sinal (por padrão o `SIGTERM`): `kill -9 ` para terminar imediatamente (use com cautela!). ### Casos de Uso * **Servidores desresponderem**: Um processo em segundo plano pode estar consumindo toda a CPU. O `top` ajuda a identificar qual é. * **Monitoramento contínuo**: Deixar `top` rodando em segundo plano (com `top -d 5` para atualizações a cada 5 segundos, por exemplo) permite acompanhar a evolução dos consumos. * **Ajuste de prioridade**: Você pode priorizar processos críticos (baixando a prioridade com `renice`) ou processos menos críticos (aumentando a prioridade). O `top` é uma ferramenta poderosa para diagnósticos de desempenho, especialmente quando o foco está no consumo de CPU. ## Quais são as armadilhas ao monitorar memória virtual e como evitá-las? A memória virtual no Linux representa o espaço de endereçamento abstrato mapeado pelos processos, e seu monitoramento apresenta peculiaridades técnicas e armadilhas comuns. O maior desafio reside na diferença críticas entre **memória física residente (RSS)** e **memória virtual total (VSZ)**. Ferramentas como `top` e `htop` exibem `%MEM` baseado no RSS, mas o consumo real de páginas de swap (pode ser monitorado com `free -h` ou `vmstat`) é determinado pela memória não residente. ### 1. **Armamada do "Consumo Aparente"** Processos podem acumular grandes quantidades de memória virtual sem impactar diretamente o RSS ou o uso de swap no momento. Isso ocorre com bibliotecas compartilhadas carregadas múltiplas vezes ou com alocações de memória que não são paginadas imediatamente. **Como evitar**: - Use `pmap -x ` para detalhar o mapeamento de memória e identificar endereços não residentes. - Combine com `smem` (disponível em pacotes como `sysstat`) que ajusta métricas para evitar inflação de memória compartilhada. ### 2. **Armamada do Overcommit de Memória** O kernel do Linux permite o *overcommit*, alocando memória virtual sem verificar se há física disponível. Isso previne estouros, mas pode ocultar problemas de memória. **Como evitar**: - Verifique a configuração `/proc/sys/vm/overcommit_memory`. Valores acima de 1 (ativo) podem mascarar gargalos. - Use `grep -m 1 CommitAge /proc/vmstat` para identificar se o overcommit está causando vazamento de memória. ### 3. **Armamada do Cache vs. Ativação de Páginas** O Linux usa swap como cache de arquivos, gerando alta utilização de memória virtual sem necessariamente impactar o desempenho. **Como evitar**: - Diferencie cache de swap ativo (monitorado com `zswap`) de memória de processos com `free -h --si`. - Use `sar -r` para analisar a relação entre memória física e swap, verificando se a atividade de swap é consistente. ### 4. **Armamada da Fragmentação de Páginas** A fragmentação de memória física pode aumentar o consumo de páginas de swap, mesmo com capacidade física disponível. **Como evitar**: - Combine métricas de `free -m` com `dmesg | grep -i "lowmem"`, que mostra alertas de memória física críticos. - Em sistemas críticos, desative o overcommit com `sysctl vm.overcommit_memory=0` (com cautela). ### 5. **Armamada da Contabilidade de Recursos (cgroups)** Sem isolamento, processos podem exaurir memória virtual compartilhada. **Como evitar**: - Implemente cgroups para monitorar memória por processo com `cat /sys/fs/cgroup/memory/memory.usage_in_bytes`. - Use `memory.max` para limitar o consumo virtual em containers ou processos críticos. ### 6. **Armamada do Monitoramento Estático** Métricas como `%MEM` em `top` não refletem o crescimento dinâmico da memória virtual. **Como evitar**: - Capture snapshots com `pmap -q ` antes e depois de operações intensas para comparar o VSZ. - Use `objdump -s ` para analisar se bibliotecas externas estão inflando o VSZ. ### Melhores Práticas - **Rotina de Diagnóstico**: Colete amostras de `free -h`, `vmstat`, e `top` a cada 10 segundos por 5 minutos para correlacionar spikes de memória com eventos. - **Ferramentas Especializadas**: Priorize `htop` (para detalhamento em tempo real) e `pmap` (para análise granular) sobre interfaces gráficas simples. - **Monitoramento Proativo**: Integre com Prometheus e Grafana para alertar sobre variações anômalas de memória virtual, especialmente em sistemas críticos. Essas armadilhas exigem uma abordagem técnica cuidadosa, combinando ferramentas tradicionais com scripts personalizados para evitar diagnósticos enganosos. ## Monitorando o tráfego de rede: como diagnosticar congestionamentos? ### Identificação de Congestionamentos de Rede Congestionamentos de rede se manifestam por vários sintomas: latência elevada, perda de pacotes e variação de janela TCP. Para diagnosticar esses problemas, precisamos observar o tráfego em tempo real e analisar métricas de rede. #### Ferramentas para monitoramento em tempo real - **iftop**: Mostra o tráfego atual por porta em um formato similar ao `top`. Ideal para identificar picos momentâneos. Exemplo: ```bash sudo iftop -i eth0 ``` - **nload**: Interface gráfica leve para monitorar o tráfego de entrada e saída em tempo real em cada interface. Instalação: ```bash de Biarritz, France sudo apt install nload ``` - **iptraf-ng**: Painel de monitoramento de rede com métricas detalhadas por protocolo e porta. Instalação: ```bash sudo apt install iptraf-ng ``` ### Diagnósticos de Desempenho Além do monitoramento em tempo real, é crucial verificar métricas do kernel e do sistema para entender o impacto do congestionamento. #### Métricas do kernel - **sysctl net.ipv4.tcp_dsack**: Ativar descarte de SACKs duplicados, que podem indicar congestionamento. Verificação: ```bash sysctl net.ipv4.tcp_dsack ``` - **sysctl net.core.rmem_max**: Buffer máximo para o receptor. Diminuições anômalas podem sinalizar problemas de buffer. Verificação: ```bash sysctl net.core.rmem_max ``` #### Análise de desempenho - **sar (sysstat)**: Coleta estatísticas de rede ao longo do tempo. Exemplo: ```bash sar -n DEV -u -r -p 5 ``` - **bmon/bwm-ng**: Medição precisa de largura de banda e gravação de logs para análise pós-facto. Instalação: ```bash sudo apt install bmon bwm-ng ``` ### Técnicas Avançadas Para diagnósticos mais profundos, utilizamos ferramentas que permitem análise de pacotes e medição de largura de banda com precisão. #### Análise de pacotes - **vnstat**: Contador de pacotes leve para estatísticas de rede. Instalação: ```bash sudo apt install vnstat vnstat --install ``` - **tc (Traffic Control)**: Medir largura de banda efetiva com classificação de tráfego. Exemplo: ```bash tc qdisc show ``` #### Monitoramento de largura de banda - **iperf3**: Gerar tráfego controlado para medir a largura de banda disponível. Exemplo: ```bash iperf3 -s # Servidor iperf3 -c server -p 5001 -t 30 # Cliente ``` ### Melhores Práticas - **Rotina de Diagnóstico**: Capture amostras de `iftop`, `vnstat` e `sar` a cada minuto por 15 minutos durante eventos suspeitosos. - **Monitoramento Proativo**: Integre ferramentas como Prometheus e Grafana para alertar sobre variações anômalas de latência e perda de pacotes. - **Configuração de Buffer**: Ajuste parâmetros de rede críticos com `sysctl` para evitar descarte excessivo de pacotes. Diagnósticos efetivos de congestionamentos exigem uma abordagem combinatória, integrando ferramentas de monitoramento em tempo real, métricas do kernel e análise de pacotes. ## Usando `sar` para relatórios históricos de sistema: uma abordagem prática. O `sar` (System Activity Reporter) é uma ferramenta poderosa da família `sysstat` que coleta e relata estatísticas de desempenho do sistema. Suas principais características incluem: - Coleta dados em tempo real e armazena no buffer do kernel - Gera relatórios detalhados de CPU, memória, disco e rede - Suporta exportação para arquivos CSV para análise externa - Permite visualização de dados históricos através do buffer ### Instalação e configuração inicial ```bash sysstat --version sudo apt install sysstat -y sudo systemctl enable sysstat sudo systemctl start sysstat ``` ### Coleta de dados de CPU e memória Para monitorar o consumo de CPU e memória, utilize: ```bash sar -u -p 10 sar -r -p 5 ``` ### Armazenamento e recuperação de dados históricos ```bash sar -d -o disk_activity.dat 60 &> /dev/null sar -d -f disk_activity.dat ``` ### Análise de dados combinados Para obter uma visão abrangente do sistema: ```bash sar -u -r -d -p 10 > system_stats.log 2>&1 cat system_stats.log ``` ### Visualização gráfica com dados históricos ```bash sar -u -f cpu_data.dat --output cpu_usage.csv gnuplot -e "plot 'cpu_usage.csv' using 2:3 with lines" ``` ### Melhorias de performance com configuração avançada ```bash echo "SARINTERVAL=1" | sudo tee -a /etc/default/sysstat sudo systemctl restart sysstat ``` ### Considerações finais O `sar` oferece uma solução completa de monitoramento de sistema, permitindo: - Análise retrospectiva de problemas ocorridos fora de horário de trabalho - Comparação de desempenho entre diferentes períodos - Detecção de padrões sazonais de uso - Documentação automática de métricas críticas A combinação de relatórios em tempo real e dados históricos possibilita uma análise abrangente do comportamento do sistema, essencial para identificar tendências e otimizar recursos. ## A metáfora do trânsito: como o monitoramento de I/O pode evitar 'engarrafamentos' no sistema? O sistema operacional é como uma cidade metropolitana, onde os dados são veículos e os recursos são estradas. Quando a 'velocidade' de leitura/gravação (I/O) excede a capacidade das 'estradas' (dispositivos de armazenamento), ocorrem 'engarrafamentos' - lentidão generalizada, processos bloqueados e resposta do sistema decaída. O monitoramento de I/O nada mais é que colocar câmeras e sensores para entender onde e quando esses congestionamentos acontecem, permitindo intervenções proativas. ### O que é I/O e por que monitorá-lo? * **I/O (Input/Output):** É a transferência de dados entre o sistema (CPU, memória) e dispositivos externos (discos, rede, periféricos). Inclui leituras (ler dados do disco ou rede) e escritas (gravar dados no disco ou rede). * **Por que monitorar?** Sem monitoramento, os 'engarrafamentos' de I/O são invisíveis. Eles podem ser transitórios (um comando pesado que dura segundos) ou crônicos (aplicações mal dimensionadas ou configurações subotimizadas). Monitorar permite: * **Identificar gargalos:** Descobrir se o disco é o limitador do desempenho geral. * **Prever falhas:** Ver padrões de uso que antecedem problemas de desempenho críticos. * **Otimizar recursos:** Garantir que aplicações críticas tenham prioridade no acesso aos dispositivos. * **Planejar expansão:** Saber quando os recursos de I/O atuais são insuficientes. ### Ferramentas para monitorar I/O O Linux oferece várias ferramentas nativas para esse propósito: 1. **`iostat` (parte do `sysstat`):** Fornece estatísticas detalhadas de I/O para dispositivos de bloco e dispositivos de rede. É a ferramenta mais direta para monitorar o tráfego de disco. * **Exemplo básico:** `iostat -d /dev/sda 1` mostra o uso do disco `/dev/sda` atualizado a cada segundo. * **Exemplo com armazenamento histórico:** `iostat -d -m -p /dev/sda 10 > disk_usage.dat 2>&1` coleta dados por 10 segundos e os armazena em `disk_usage.dat`. 2. **`sar` (parte do `sysstat`):** Pode ser usado para relatar estatísticas de I/O salvas por `iostat` ou coletadas diretamente. É ideal para análise retrospectiva. * **Exemplo de relatório de disco:** `sar -d -f disk_activity.dat` (se os dados forem salvos com `sar -d -o`). * **Exemplo de relatório combinado:** `sar -u -d -r -p 1 > system_iostat.log 2>&1` coleta CPU, disco e memória em tempo real. 3. **`mpstat` (parte do `sysstat`):** Mostra estatísticas de CPU, mas pode ser usado para ver o impacto do I/O nas CPUs dedicadas a processar operações de disco. * **Exemplo:** `mpstat -P all 1` mostra o uso de CPU por núcleio a cada segundo. 4. **`vmstat`:** Mostra estatísticas do sistema, incluindo memória, páginas (faults, swaps), bloqueios de I/O (`io`) e dispositivos ativos (`device`). É mais genérico que `iostat`. * **Exemplo:** `vmstat 5` atualiza as estatísticas a cada 5 segundos. ### Interpretando os dados: sinais de 'engarrafamento' A interpretação é tão importante quanto a coleta. Valores extremos ou consistentemente altos em certas métricas indicam problemas: * **`iostat`:** * `rrqm/s`, `wrqm/s`: Taxas de requisições de leitura/gravação consolidadas que não são atendidas pela taxa real de transferência. Valores altos, especialmente em conjunto com `wait`, indicam fila congestionada. * `wait`: Porcentagem de tempo que os processos estão bloqueados aguardando I/O. Valores próximos a 100% são um alerta sonoro. É calculado como `(ready + disc_wait) / ticks`. * `util`: Porcentagem de tempo que o dispositivo está ocupado realizando operações de I/O. Valores próximos a 100% (geralmente acima de 70-80%) sugerem que o dispositivo está saturado e não há capacidade para lidar com mais requisições. Isso *não* é necessariamente o 'engarrafamento' geral do sistema, mas um ponto crítico. * **`vmstat`:** * `io`: Taxa de transferência de I/O em blocos por segundo. Baixa em comparação com `sys` pode significar operações curtas e frequentes. * `sys`: Taxa de tempo de CPU gasto lidando com requisições de I/O (atendendo a fila de I/O). Alto `sys` pode significar fila longa ou CPU sobrecarregada tentando processar o I/O. * `wa`: Tempo de CPU gasto em espera por I/O (user space). Alto `wa` indica que processos do usuário estão frequentemente parados por I/O. * `free`: Memória física livre. Muito baixo pode levar o sistema a usar mais memória em cache/dirty, potencialmente aumentando o I/O. ### Trade-offs e cenários comuns * **Disco vs. Memória:** Um 'engarrafamento' de disco pode ser confundido com falta de memória. Se `util` do disco está alto, mas `free` da memória é razoável, o problema está no disco. Se `util` do disco está baixo, mas `wa` é alto, pode haver falta de memória física (forçando o sistema a usar swap, que é lento) ou processos que consomem memória em cache (o que é geralmente benéfico, mas pode mascarar falta de memória verdadeira). * **Dispositivos lentos vs. Sobrecarga:** Um disco antigo pode ter `util` máximo mesmo em condições normais. Um servidor moderno pode ter `util` baixo, mas alta latência devido a muitos processos concorrentes competindo pelo mesmo dispositivo. * **Monitoração em tempo real vs. Análise retrospectiva:** O `sar` é excelente para análise histórica, mas pode não capturar picos imprevistos. Ferramentas como `iostat` ou `vmstat` em tempo real são úteis para detecção de problemas atuais. ### Conclusão sobre I/O O monitoramento de I/O é essencial para manter o fluxo de dados no sistema. Ignorar os sinais de 'engarrafamento' (altos `util`, `wait`, `wa`) pode levar a desempenho decadente e instabilidades. Ao usar `iostat`, `vmstat`, `sar` e `mpstat` adequadamente, você transforma sua infraestrutura em uma cidade inteligente com trânsito bem gerenciado, evitando lentidões e quedas de serviços. ## Processos espiões: como detectar atividades suspeitas no sistema? Após identificar que o sistema está sobrecarregado ou apresentando comportamento anômalo, o próximo passo é entender *o que* está causando isso. Detectar processos "espiões" ou atividades suspeitas envolve mergulhar no comportamento interno do sistema, especialmente nas chamadas ao sistema e nas operações de arquivo. Técnicas avançadas de monitoramento, como `strace` e `ltrace`, permitem "ouvir" as interações dos processos com o kernel, revelando operações de arquivo indesejadas ou chamadas anômalas. Além disso, o uso de `auditd` para auditoria detalhada de eventos específicos pode ajudar a rastrear acessos e mudanças que não deveriam ocorrer. Rastrear chamadas ao sistema é uma abordagem poderosa para identificar atividades maliciosas ou operações inesperadas no sistema. ## Referências - KOPF, Michael. **sar - System Activity Reporter**. Disponível em: . Acesso: 2024. - OWASP. **Software Security Monitoring**. Disponível em:

Artigos que podem te interessar

Como usar o tmux para nunca mais perder uma sessão SSH
Como usar o tmux para nunca mais perder uma sessão SSH

# Como usar o tmux para nunca mais perder uma sessão SSH A rotina de um desenvolvedor...

Alias e funções no Bash que todo dev deveria ter
Alias e funções no Bash que todo dev deveria ter

# Alias e funções no Bash que todo dev deveria ter Alias e funções no Bash que todo...

code Disqus here

code graphcomment here https://graphcomment.com