Processor Queue Length e Thread Saturation

Como combinar saturação de threads com fila proporcional, para diagnóstico preciso de gargalos de CPU

Duas Métricas Complementares

Thread Saturation

Quantos processadores lógicos estão em 100% de uso

Exemplo: 3 de 8 processadores lógicos saturados

Processor Queue Length

Tamanho da fila de processos aguardando execução

Exemplo: 5 processos na fila esperando CPU

Juntas: Essas métricas criam uma visão completa do comportamento do servidor, e indicam se o problema é de aplicação ou infraestrutura.

Estados de Saturação (cpu_filastats)

0

tNORMAL

Condição: Fila ≤ 50% dos núcleos

O que significa:

  • • Fila vazia ou baixa
  • • Processos encontram núcleos livres rapidamente
  • • Servidor está saudável
Exemplo: 2 núcleos saturados em servidor 8-core, fila baixa = NORMAL
1

tMODERADO

Condição: Fila entre 50% e 100% dos núcleos

O que significa:

  • • Todos os núcleos começam a ficar ocupados
  • • Processos precisam aguardar milissegundos
  • • Alerta amarelo: gargalo próximo
Ação: Monitorar, pode precisar scale-up em breve
2

tSATURADO

Condição: Fila entre 1x e 2x o número de núcleos

O que significa:

  • • Fila significativa de processos
  • • Processador sob pressão
  • • Performance começando a degradar
Exemplo: 16 núcleos com fila de 20-32 processos
3

tCRITICO

Condição: Fila maior que 2x o número de núcleos

O que significa:

  • • Colapso do sistema
  • • Tempo de resposta despencar
  • • Travamentos e timeouts para usuários
Ação URGENTE: 16 núcleos com fila de 40+ = Scale-Up ou Scale-Out necessário

Por Que Fila Proporcional é Melhor

O Erro das Ferramentas Tradicionais

Usam valores absolutos: "Alerte se fila maior que 5"

Fila = 5 em Dual-Core:

TERRÍVEL (250% de carga)

Fila = 5 em 64-cores:

IMPERCEPTÍVEL (7.8% de carga)

A Solução SVS Monitor

Limites elásticos e proporcionais ao hardware

Fila = 2 em 4-cores:

50% → tMODERADO

Fila = 32 em 16-cores:

200% → tCRITICO

Matriz de Diagnóstico para ERP (Protheus/RM)

Cenário A: CPU Baixa + Saturação Alta em Poucos Cores + Fila Normal

Exemplo:

  • • CPU média: 30%
  • • 2 de 8 cores saturados
  • • Fila: 1 processo (NORMAL)

Diagnóstico:

Não é que o servidor esta sobrecarregado, mas a Rotina específica esta consumindo uma thread em sua totalidade (relatório mal otimizado, fechamento contábil pesado). Isso vai afetar a aplicação, mas não adianta adicionar mais cores.

Ação:

  • • Otimizar rotina do ERP
  • • Revisar query SQL
  • • Dividir processamento em mais threads
  • • Avaliar se processador possui boa capacidade de processamento, seguindo as especificações e necessidades do sistema
  • • NÃO comprar mais processadores (seria jogar dinheiro fora)

Cenário B: CPU Alta + Todos os Cores Saturados + Fila Crítica

Exemplo:

  • • CPU média: 85%
  • • 8 de 8 cores saturados
  • • Fila: 35 processos (CRÍTICO - 4.4x os núcleos)

Diagnóstico:

Servidor literalmente afogado. Volume de requisições simultâneas maior que capacidade do processador

Ação:

  • • Avaliar se uma rotina com multiplas threads é a ofensora, ou se o problema são diversas operações consumindo recursos (SVS Application)
  • • Scale-Up: Adicionar mais cores ao servidor
  • • Scale-Out: Adicionar novo servidor de aplicação
  • • Avaliar se processador possui boa capacidade de processamento, seguindo as especificações e necessidades do sistema
  • • Migrar para um processador mais performático

Por Que Essa Lógica é Impecável

Permite diagnosticar com precisão matemática:

  • Se o problema é aplicação mal escrita consumindo 1 núcleo só
  • Se realmente falta infraestrutura para o volume de trabalho
  • Não apenas dizer servidor está lento, mas PROVAR por quê

Complementaridade com Subseção Anterior

Subseção 1: Eficiência de CPU

  • Mostra QUEM está consumindo
  • Processadores lógicos saturados
  • Identifica rotinas ofensoras

Subseção 2: Queue Length + Saturation

  • Mostra QUANTO o sistema sofre
  • Fila proporcional
  • Indica se é app ou infraestrutura

Juntas = Visão completa e assertiva do comportamento do servidor