CPU ociosa com sistema lento: como identificar gargalos reais no servidor

CPU ociosa com sistema lento. Esse é um clássico de produção — e quase nunca é CPU 😄
Quando a CPU está ociosa, mas o sistema está lento, o gargalo geralmente está esperando algo.

Vamos direto ao ponto, do jeito prático que sysadmin gosta.


O que significa “CPU ociosa e sistema lento”

Se a CPU está baixa, mas tudo demora:

  • requisições web
  • login SSH
  • comandos simples (ls, df)
  • páginas WordPress abrindo devagar

👉 o sistema não está processando, está bloqueado esperando recurso.


1️⃣ I/O Wait (o vilão nº 1)

A CPU aparece “livre”, mas está esperando disco.

Como identificar

top

Ou:

vmstat 1

Olhe para:

  • wa (wait) acima de 5–10% = alerta
  • load average alto com CPU baixa = clássico I/O wait

Causas comuns

  • SSD/NVMe compartilhado (overselling)
  • RAID mal configurado
  • MySQL fazendo flush pesado
  • swap/zram mal ajustado

Confirmação

iostat -x 1

Se ver:

  • %util perto de 100%
  • await alto

👉 gargalo de disco confirmado


2️⃣ Memória insuficiente (sem swap ≠ sem problema)

Mesmo com RAM “livre”, o kernel pode estar sofrendo.

Verifique:

free -h

Problemas típicos:

  • Sem swap → OOM silencioso ou travadas
  • Swap demais → latência absurda
  • ZRAM/ZSWAP mal dimensionado

Sintoma clássico

  • CPU baixa
  • load médio/alto
  • sistema “congelando” por segundos

3️⃣ Processos bloqueados (estado D)

Processos presos em I/O.

ps aux | awk '{print $8}' | sort | uniq -c

Se aparecer muitos processos em:

D

👉 eles estão esperando disco, rede ou filesystem.


4️⃣ Gargalo de rede (parece CPU, mas não é)

Muito comum em:

  • VPS oversold
  • storage remoto
  • NFS / backup ativo

Testes rápidos

ss -s
ping -c 20 gateway

Olhe:

  • retransmissões
  • latência inconsistente
  • filas de socket grandes

5️⃣ MySQL/MariaDB travando tudo

Muito comum em WordPress.

Mesmo com CPU baixa:

  • queries lentas
  • flush de InnoDB
  • locks de tabela

Verifique:

mysqladmin processlist

Ou:

SHOW ENGINE INNODB STATUS\G

Sinais:

  • muitos Waiting for table metadata lock
  • log_sys->mutex alto
  • buffer pool pequeno demais

6️⃣ Load alto com CPU baixa = threads presas

Load ≠ CPU.

Load alto pode significar:

  • processos esperando I/O
  • fila de tarefas bloqueadas
  • kernel congestionado

Confirmação

uptime

Depois:

top

Compare:

  • load average
  • %id (idle)

Load alto + idle alto = gargalo externo à CPU.


Checklist rápido de diagnóstico

Em produção, siga essa ordem:

  1. top → ver wa e load
  2. iostat -x 1 → disco
  3. free -h → memória / swap
  4. ps aux | grep D → processos bloqueados
  5. ss -s → rede
  6. MySQL (processlist, slow query)

Frase para guardar

CPU ociosa não significa sistema saudável.
Normalmente significa que o sistema está esperando algo que você não está olhando.

FAQ

Por que o sistema fica lento mesmo com a CPU ociosa?

Porque a CPU pode estar esperando outros recursos, como disco, memória ou rede. O gargalo mais comum é I/O wait, onde os processos ficam bloqueados aguardando operações de leitura ou escrita no disco.

Como identificar se o problema é I/O wait?

Utilize comandos como top, vmstat e iostat. Se o campo wa estiver alto ou o %util do disco próximo de 100%, o gargalo está no subsistema de armazenamento.

Load average alto sempre indica CPU sobrecarregada?

Não. Load average mede processos ativos e bloqueados. É comum ter load alto com CPU ociosa quando processos estão presos esperando I/O, swap ou filesystem.

Falta de memória pode causar lentidão mesmo sem usar swap?

Sim. O kernel pode estar fazendo cache pressure ou matando processos silenciosamente. Além disso, ausência total de swap pode gerar travamentos momentâneos em picos de uso.

WordPress pode causar esse tipo de problema?

Com certeza. Consultas lentas no MySQL/MariaDB, locks de tabela ou flush excessivo do InnoDB podem deixar o sistema lento mesmo com CPU baixa.

Como evitar esse problema em produção?

Monitorando métricas corretas: I/O wait, latência de disco, memória real, swap, processos em estado D e tempo de resposta do banco de dados — não apenas uso de CPU.

[Precisa de ajuda com outro problema? 
Nossa equipe está disponível 24 horas por dia, 7 dias por semana .]

Veja Mais:

Processos Zumbis: O que são e como limpar a tabela de processos

OOM Killer no Linux: Por que o MySQL é morto e como evitar

A Arte do Troubleshooting Linux: Diagnosticando problemas complexos(Metodologia USE – Utilization, Saturation, Errors)

SSH seguro além de mudar a porta

Como bloquear acesso de país com ConfigServer Firewall (CSF)