Como Descobrir o Que Está Consumindo CPU no Linux

Seu servidor está lento? Aplicações travando? A CPU está em 100%? Descubrir qual processo está devorando seus recursos de processamento é fundamental para manter a saúde do seu sistema. Vamos explorar as principais ferramentas e técnicas para diagnosticar o consumo de CPU no Linux.

Por Que Monitorar CPU?

Um sistema com CPU saturada pode:

  • Reduzir drasticamente a responsividade das aplicações
  • Gerar gargalos em processamento de dados
  • Indicar problemas silenciosos antes de causarem falhas críticas
  • Ajudar na otimização de recursos

1. top — A Ferramenta Mais Simples

O comando top é seu ponto de partida. É interativo e mostra em tempo real quais processos estão consumindo mais CPU.

top

O que observar:

  • %CPU: Percentual de CPU consumido pelo processo
  • PID: Identificador do processo
  • COMMAND: Nome do comando/aplicação

Dica: Pressione Shift + P para ordenar por consumo de CPU (já vem assim por padrão, mas é bom saber).

Usando top em batch mode

Se quiser capturar dados uma única vez sem modo interativo:

top -bn1 | head -30

2. ps — Listagem Pontual e Filtrável

Para uma análise rápida sem modo interativo, ps é perfeito:

ps aux --sort=-%cpu | head -10

Este comando lista os 10 processos que mais consomem CPU.

Explicação dos campos:

  • USER: Usuário que iniciou o processo
  • %CPU: Percentual de CPU
  • %MEM: Percentual de memória
  • VSZ: Memória virtual usada
  • RSS: Memória física usada
  • COMMAND: Comando completo

3. htop — Uma Versão Melhorada do top

Se top é básico, htop é sua versão turbinada com interface mais amigável:

htop

Vantagens do htop:

  • Visualização em cores
  • Navegação mais intuitiva com setas
  • Possibilidade de matar processos diretamente
  • Mostra árvore de processos mais clara

4. pidstat — Monitoramento Contínuo de Processos

O pidstat é parte do pacote sysstat e permite monitorar um processo ao longo do tempo:

pidstat -u 1 10

Isso monitora a CPU a cada 1 segundo por 10 iterações.

Para um processo específico:

pidstat -u -p 1234

Substitua 1234 pelo PID do processo.

5. iotop — Descobrir se é CPU ou Disco

Às vezes, a CPU está alta porque o sistema está esperando I/O de disco:

sudo iotop

Isso mostra quais processos estão fazendo mais leitura/escrita em disco.

6. dstat — Dashboard Completo

dstat oferece visão holística do sistema:

dstat -tcms

Mostra CPU, memória, disco e rede em tempo real.

7. Análise de Processos Específicos

Ver detalhes de um processo

cat /proc/[PID]/stat

Ver threads de um processo

ps -eLf | grep [PID]

Rastrear chamadas de sistema (strace)

Se suspeita que um processo está preso:

strace -p [PID]

Mostra quais operações de sistema o processo está realizando.

Caso Prático: Diagnosticando Um Sistema Lento

Passo 1: Verificar uso geral de CPU

top -bn1 | head -3

Passo 2: Identificar o processo culpado

ps aux --sort=-%cpu | head -5

Passo 3: Analisar mais profundamente

pidstat -u -p [PID]

Passo 4: Verificar se é CPU ou I/O

sudo iotop

Passo 5: Coletar histórico para análise

top -bn1 > cpu_analysis_$(date +%s).txt

Dicas de Ouro

  1. Diferencie entre CPU do sistema e do usuário:
    • us (user) = tempo em código de aplicações
    • sy (system) = tempo em chamadas de sistema do kernel
  2. Cores no top/htop:
    • Verde = CPU normal
    • Amarelo/Laranja = CPU elevada
    • Vermelho = CPU crítica
  3. Carga do sistema vs CPU:
    • Load average > núcleos disponíveis = sistema saturado
    • Veja com: nproc ou /proc/cpuinfo
  4. Automatizar monitoramento:
watch -n 1 'ps aux --sort=-%cpu | head -10'
  1. Exportar dados para análise posterior:
sar -u 1 10 > cpu_history.txt

Conclusão

Dominar essas ferramentas transforma você em um detective de performance. Cada uma tem seu lugar:

  • top/htop: Visão rápida e interativa
  • ps: Análise pontual e filtrável
  • pidstat/sar: Monitoramento contínuo
  • strace: Investigação profunda

O segredo é praticar e conhecer seu sistema em estado normal para reconhecer anomalias quando elas aparecem.


Gostou? Compartilhe com alguém que precisa diagnosticar CPU no Linux!