Checkout lento no pico de acesso quando o gargalo está fora do seu servidor: frete, gateway, antifraude e ERP
Catálogo rápido, CPU baixa e checkout travado? O problema pode estar em API de terceiro. Veja como identificar o gargalo e contê-lo sem gastar em servidor.
2026-09-22 · Equipe · 11 min de leitura
Catálogo abrindo rápido, CPU da VPS baixa e o cliente travado no cálculo de frete ou na finalização do pedido: o recurso que acabou não é a sua máquina, é o processo da loja parado esperando a resposta de uma API de terceiro. Aí mais servidor não resolve — conter a espera resolve.
Checkout lento no pico de acesso, com o catálogo abrindo rápido e a CPU da VPS baixa, quase nunca é falta de máquina: é o processo da loja parado esperando a resposta de uma API de terceiro — frete, gateway de pagamento, antifraude ou ERP. Mais servidor não resolve; conter a espera resolve.
- Catálogo rápido, CPU baixa e checkout travado é a assinatura de espera por serviço externo, não de falta de servidor.
- Enquanto a loja espera o terceiro, o processo que atende aquele cliente fica ocupado sem consumir CPU; por isso poucas pessoas no checkout bastam para ocupar todos os atendentes e derrubar até a home.
- A espera aparece no tempo de resposta medido por rota e nas linhas de timeout do log da aplicação; a média do site inteiro esconde exatamente a rota lenta.
- Timeout curto com falha definida, cache de cotação por CEP e peso, fila assíncrona para o que não é tempo real e integração não essencial desligada no dia do pico: cada uma resolve uma parte, nenhuma resolve todas.
- Subir servidor extra não conserta gargalo de terceiro e pode piorar, porque mais réplicas fazem mais chamadas contra uma API que tem limite de requisições.
Checkout lento no pico de acesso: por que só essa rota degrada
Sintoma localizado em uma rota aponta para o que só aquela rota faz: se o catálogo está normal e a lentidão está no cálculo de frete, na finalização do pedido ou na confirmação de pagamento, o candidato é uma chamada a serviço externo que passou a demorar.
O checkout não é uma página só sua: nele entram serviços de outras empresas, cada um respondendo no tempo dele:
- Transportadora ou agregador de frete — cotação por CEP, peso e dimensão, a cada alteração do carrinho.
- Gateway de pagamento — autorização do cartão, que só termina quando bandeira e emissor respondem.
- Antifraude — análise de risco do pedido antes da aprovação.
- ERP — baixa de estoque, cadastro do cliente, emissão de nota.
O pico é seu, mas também é deles: Black Friday é Black Friday para a API da transportadora, para o antifraude e para o ERP. A resposta que levava frações de segundo no dia comum passa a levar segundos no dia em que você tem gente no site. O quadro geral está no checklist de lentidão sob carga.
O trabalhador que fica ocupado sem fazer nada: a chamada externa bloqueante
A sua loja atende com um número fixo de trabalhadores — no mundo PHP, os workers do PHP-FPM, processos em quantidade definida na configuração. Cada visita ocupa um worker do início ao fim da resposta.
Chamada bloqueante é quando o código pede a cotação de frete e para ali até a resposta chegar: o worker continua alocado àquele cliente, ocupado mas sem trabalhar — na linha, esperando a outra empresa atender.
Daí o sinal mais contraintuitivo: CPU baixa e loja lenta ao mesmo tempo. O que acabou não foi processador, foi disponibilidade de atendente — cada segundo a mais na resposta da API é um atendente parado naquela rota, inclusive para quem só simulava frete e nunca vai comprar.
Servidor no teto ou terceiro lento: os sinais que separam os dois casos
A resposta é oposta em cada caso, então vale separar antes de gastar:
| Sinal observado | Servidor no teto | Terceiro lento |
|---|---|---|
| Quais páginas degradam | Todas, home e categoria incluídas | Só checkout, carrinho e cálculo de frete |
| CPU e memória no pico | No teto, com fila de processos | Folgadas, às vezes quase ociosas |
| Ao subir réplica | Melhora | Igual, ou pior |
| Erro típico | 502 e 504 na loja inteira | 504 e timeout só na rota de pagamento ou de frete |
| Horário | Todo pico de acesso | Picos que coincidem com instabilidade do fornecedor |
Dois testes caseiros confirmam a suspeita. O primeiro: cronometrar a URL do serviço externo chamada direto do servidor, com a loja parada e com movimento; se demora igual, a lentidão não é sua. O segundo: desligar uma integração não essencial em ambiente de teste — nunca em produção no meio da campanha — e refazer o tempo do checkout; se cai, você achou o responsável.
Vale ler o código de erro com a ajuda de o que 502, 503 e 504 significam: 504 na loja inteira e 504 só na rota de pagamento contam histórias diferentes.
Onde a espera externa aparece: tempo por rota, log e lista de processos
- Tempo de resposta por rota, não média do site. A média esconde a rota de frete lenta debaixo de milhares de páginas de catálogo rápidas. Meça separado carrinho, finalização do pedido e endpoint de cotação.
- Campo de tempo no log do servidor web. Nginx e Apache registram o tempo de cada requisição, mas o campo costuma não vir ativado no formato padrão. Ligue antes do pico.
- Log de erro da aplicação. Timeouts de conexão HTTP e de cURL — connection timed out, operation timed out — trazem o endereço do serviço na própria linha.
- Lista de processos durante o pico. Workers todos ocupados com CPU baixa é a assinatura da espera; com CPU no teto é outra coisa, e o remédio é outro.
Sem linha de base nada disso significa muito: saber que a rota de frete leva alguns segundos só vira diagnóstico quando você sabe quanto levava no dia comum — assunto de monitoramento de VPS, feito antes do pico.
Efeito fila: por que poucos clientes no checkout derrubam a loja inteira
A conta é direta: o número de atendentes dividido pelo tempo de ocupação dá quantos pedidos por segundo a loja aguenta naquela rota. Ilustração do mecanismo, não medida de loja nenhuma: vinte workers e uma cotação de quatro segundos dão cinco pedidos por segundo — vinte pessoas simultâneas no frete já ocupam tudo.
Ocupados todos os atendentes, a fila passa a incluir quem só queria ver produto: a home cai por culpa da integração de frete. Não é volume de tráfego, é tempo de ocupação — por isso o Analytics mostra pouca gente no site e a loja está de joelhos.
Quem quiser medir o próprio teto nessa rota precisa de teste de carga com cenário de checkout: teste que só busca a página inicial mede a parte da loja que nunca foi o problema.
Timeout, cache de frete, fila assíncrona e integração desligada: o que cada medida muda
- Timeout curto. Definir quanto tempo a loja espera antes de desistir e o comportamento de falha: frete indisponível com opção padrão, mensagem clara, nunca tela branca. Não torna o terceiro rápido — impede que ele segure a sua loja.
- Cache do cálculo de frete por CEP e peso. A mesma combinação repetida não precisa de nova cotação; guardar a resposta por um tempo curto corta parte do volume. Não resolve a autorização de pagamento, única por pedido. O que pode e o que não pode sair de cache está em o que o cache absorve e o que sobra para o servidor.
- Fila assíncrona. O que não precisa acontecer com o cliente na tela — envio ao ERP, emissão de nota, e-mail transacional, sincronização de estoque — sai do caminho do checkout e roda depois. Exige um processo que consuma a fila e trate o que falhar lá atrás.
- Desligar integração não essencial no dia do pico. Chat, recomendação, pixel do lado do servidor, relatório em tempo real. É decisão de negócio, e essa lista entra na preparação feita antes da campanha, não no meio da queda.
O limite honesto: pagamento e antifraude em geral precisam ser síncronos, por regra do fornecedor e por risco de fraude. Aceitar pedido sem autorização do cartão transfere o problema para o financeiro.
Por que subir servidor extra piora gargalo de terceiro — e quando o burst volta a ajudar
Mais réplicas fazem mais chamadas simultâneas contra a mesma API, que tem limite de requisições por minuto ou por contrato. O resultado pode ser bloqueio por limite de taxa ou respostas ainda mais lentas para todo mundo — o mesmo mecanismo do gargalo de banco de dados na VPS: multiplicar quem pede não multiplica quem responde.
Burst é subir máquinas extras na nuvem pública só durante o pico e removê-las quando a demanda cai, mantendo a operação normal na VPS fixa. Faz sentido quando a espera externa já está contida e a aplicação continua batendo no teto de CPU e de processos: aí falta máquina de verdade, e o que precisa existir para escalar está em auto scaling em VPS.
A ordem de trabalho quando a lentidão do checkout vem de fora
- Medir tempo de resposta por rota, separando checkout e cotação do resto do site.
- Identificar qual chamada externa está segurando, pelo log de erro e pelo teste direto do servidor.
- Aplicar timeout com comportamento de falha definido e visível para o cliente.
- Cachear o que se repete — cotação por CEP e peso.
- Empurrar para fila o que não é tempo real: ERP, nota, e-mail, estoque.
- Só então avaliar capacidade de máquina.
O erro caro é inverter essa ordem: contratar máquina maior para um problema que a máquina não tem. A fatura sobe, o checkout continua igual e o pico passa. Se depois de conter a espera externa o teto medido continuar abaixo do pico esperado, aí a conversa é sobre reforço por hora no dia da campanha.
Falar sobre o piloto do primeiro pico no WhatsApp
Perguntas frequentes
Como saber se o problema é do meu servidor ou de quem fornece o frete?
Compare os sinais: se só o checkout degrada enquanto a home fica rápida e a CPU está baixa, aponta para serviço externo. Se todas as páginas ficam lentas e a CPU no teto, é falta de servidor.
Faça dois testes: chame a URL do frete direto do seu servidor e cronometre com a loja parada e com movimento — se demora igual, a lentidão vem de lá mesmo. Segundo: desative a integração em ambiente de teste e refaça o tempo do checkout; se cai de vez, você achou o culpado.
Aumentar o servidor resolve lentidão causada por integração de terceiro?
Não. Mais réplicas da aplicação fazem mais chamadas simultâneas contra a mesma API, que tem limite de requisições. O resultado pode ser bloqueio por limite de taxa ou respostas ainda mais lentas para todo mundo.
A regra é simples: o que é replicável resolve com máquina; o que é recurso único de terceiro, não. Burst volta a fazer sentido só depois de conter a espera externa com timeout, cache e fila — aí, se a aplicação ainda bater no teto de CPU, falta máquina de verdade.
Posso processar o pagamento depois e não durante o checkout?
Não para pagamento. Pagamento e antifraude precisam ser síncronos por regra do fornecedor e por risco de fraude — aceitar pedido sem autorização do cartão transfere o problema para o financeiro.
Mas outras integrações podem ir para fila assíncrona: ERP, emissão de nota, e-mail transacional e sincronização de estoque saem do caminho do checkout e rodam depois, liberando o atendente rápido.
O que fazer quando o gateway de pagamento dá timeout no pico?
Defina um timeout curto na chamada — quanto tempo a loja espera antes de desistir — e decida o comportamento de falha: frete ou pagamento indisponível com opção padrão, mensagem clara para o cliente, nunca tela branca. Isso libera o atendente rápido.
Mas timeout sozinho não torna o gateway rápido; só impede que ele segure a sua loja. A ordem completa é: medir tempo por rota, identificar qual chamada segura, aplicar timeout, cachear o que se repete, empurrar para fila o que não é tempo real e só depois avaliar capacidade de máquina.