PerfectScale
Init Spike Handling: pods JVM com os recursos certos no boot e em execução
O Init Spike Handling dá aos pods JVM recursos de inicialização no boot e depois faz o resize in-place para o estado estável. Reduza o desperdício sem restarts.
Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

A maioria dos pods JVM é dimensionada para os dois primeiros minutos de vida e depois roda superdimensionada pelos dois meses seguintes. Se você roda Java no Kubernetes, conhece bem esse trade-off. Carregamento de classes, compilação JIT e aquecimento de cache exigem muita CPU e memória no boot. Depois que o serviço sobe, a demanda cai e permanece baixa. Ou seja, você paga por recursos no nível da inicialização em cada réplica, o tempo todo. Se dimensionar pela demanda do estado estável, você corre o risco de throttling de CPU, OOM kills e todos os problemas que vêm junto.
O PerfectScale agora faz diferente. Veja como!
Uma recomendação, dois perfis de recursos
Uma recomendação baseada em médias de uso de longo prazo mistura o pico de inicialização com tudo o que vem depois. O resultado? Requests de recursos altos demais para o estado estável, mas que ainda não cobrem totalmente as necessidades da inicialização.
As equipes geralmente acabam escolhendo uma destas três opções:
- Superprovisionar para a inicialização: a abordagem mais comum. Evita problemas no boot, mas você paga por essa capacidade extra em cada réplica, o tempo todo.
- Ajustar recursos manualmente: ajustar os recursos de inicialização e de execução separadamente e repetir o processo toda vez que um release mudar o perfil do workload. Disponível com o resize in-place, GA no Kubernetes v1.35+.
- Dimensionar pelo estado estável e torcer para dar certo: até que throttling de CPU, OOM kills ou falhas de inicialização provem o contrário. Tomara que seja a minoria.
O problema não é o dimensionamento em si. O workload tem dois perfis de recursos distintos, enquanto a recomendação considera apenas um.
Right-sizing autônomo dos recursos de inicialização e de execução
O PerfectScale identifica continuamente workloads com necessidades diferentes na inicialização e na execução e fornece recomendações de recursos separadas para cada fase:
- Fase de inicialização (init). Aplicada quando o pod é criado, por meio do mutation hook que o PerfectScale já usa para injetar os recursos recomendados. A recomendação de inicialização é dimensionada pela maior das duas fases, para que o pod não seja agendado em um nó incapaz de dar conta do boot.
- Fase de estado estável (runtime). Concluída a fase de inicialização, o PerfectScale aplica a recomendação de runtime usando o resize in-place. Os recursos são ajustados no Pod em execução, sem restart e sem nenhuma mudança manual no manifesto.
O PerfectScale se apoia em recursos nativos do Kubernetes, usando a API In-Place Pod Resize (GA na v1.35) para aplicar as recomendações de recursos de runtime sem reiniciar os Pods. O PerfectScale acrescenta a inteligência e a automação para que a otimização de inicialização e de runtime funcione de forma fluida. Ele acompanha o ciclo de vida de cada Pod e troca automaticamente dos recursos de inicialização para os de runtime quando a fase de inicialização termina. Se um Pod não puder ser redimensionado com segurança, o PerfectScale recorre a uma única recomendação de recursos para não causar interrupções no workload.
O que isso significa para você
| Antes | Depois |
|---|---|
| Recursos de pico de inicialização pagos durante todo o tempo de execução | A inicialização recebe o pico e depois o pod é redimensionado para o que o estado estável precisa |
| Dimensionar pelo estado estável traz risco de throttling, OOM kills ou falhas na inicialização | A fase de inicialização é dimensionada pela maior das duas fases |
| Ajuste manual dos recursos de inicialização vs. execução, refeito conforme os workloads mudam | Transição automática de init para runtime, sem restart e sem etapa manual |
| Risco de uma mudança automatizada quebrar uma JVM | Guardrails de segurança baseados no seu framework |
| Mudanças automatizadas em que é difícil confiar | Cada mudança é rastreada por revisão do workload, com seu impacto em uso, desperdício e economia |
Impacto:
- Seus workloads recebem os recursos de que precisam em cada etapa, e você deixa de pagar por capacidade de nível de inicialização muito depois que o boot terminou.
- É difícil confiar em uma automação que você não consegue inspecionar. O PerfectScale rastreia as mudanças de recursos entre as revisões do workload e mostra os recursos de inicialização e de estado estável separadamente no Podfit e no Zoom-in.
- Os cálculos de custo, desperdício e economia refletem as necessidades de recursos de cada fase, não uma média única.
Não é só para Java
Qualquer workload com necessidades diferentes de recursos na inicialização e na execução pode se beneficiar dessa abordagem. Exemplos comuns:
- JavaScript e TypeScript: durante o warmup do JIT do V8.
- Ruby on Rails e Django: durante o carregamento de frameworks e do estado da aplicação.
- Tarefas de init: migrações de banco de dados, aquecimento de cache e outras operações de inicialização.
- Testes de estresse e de carga: quando os workloads precisam temporariamente de mais recursos durante a inicialização ou o ramp-up dos testes.
O PerfectScale detecta esses padrões e ajusta os recursos entre as fases, com salvaguardas adicionais para frameworks como o Java.
Quer aprender a lidar com Java e outros workloads com picos de forma mais eficiente? Participe do nosso webinar para explorar os desafios e ver como o PerfectScale lida com eles. Confira os detalhes e inscreva-se no webinar aqui.