Melhores Práticas de Desempenho
Árvore de decisão de otimização e quando parar de ajustar.
Busque em todas as páginas da documentação
Árvore de decisão de otimização e quando parar de ajustar.
Aplique estas regras em revisões de design, postmortems de incidentes e PRs de otimização para que a equipe meça primeiro, altere uma variável por vez e pare quando os SLOs forem atendidos.
go test -bench / benchstat para alterações de biblioteca. Alegações de micro exigem prova de micro.GOMAXPROCS e as configurações do gerador de carga nos PRs. Números sem contexto não são reproduzíveis.net/http é frequentemente o seu manipulador.alloc_space do heap quando GC ou latência de cauda importam. A agitação de alocação impulsiona a frequência de pausas.-gcflags=-m) quando benchmem mostrar alocações surpresa. Fatos do compilador superam suposições.make([]T, 0, n) e dicas de mapa reduzem cópias de crescimento.strings.Builder em loops. Evite concatenação += em middleware crítico.sync.Pool apenas após vitórias de alocação medidas. Pools adicionam complexidade e risco de estado obsoleto.[]byte gigantes. Picos de memória se tornam eventos de GC sob carga.default.pgo nos trens de lançamento para binários estáveis vinculados à CPU. Perfis desatualizados enganam o compilador.GOMEMLIMIT perto dos limites de memória do pod antes que incidentes OOM se repitam. Limite suave aciona o GC mais cedo, não capacidade mágica.GOGC em canários com p99 e barreiras de proteção de CPU. Documente as variáveis de ambiente de rollback no runbook./debug/pprof público é um risco de segurança e DoS.Transport por upstream. http.DefaultClient não tem timeout.GOMAXPROCS com a cota de CPU do contêiner. A latência da fila executável aparece nos traces quando desalinhada.unsafe e //go:noinline como exceções revisadas. Exija ADR ou evidência de benchmark.Os níveis A a C devem ser satisfeitos antes que experimentos do Nível D sejam enviados para produção.
Se a latência p99, a taxa de erro e as métricas de custo atenderem aos SLOs acordados, adie a otimização adicional até a próxima regressão medida.
A clareza vence a revisão padrão, a menos que evidências mostrem uma exceção de caminho crítico.
Perfis ou benchmarks para PRs apenas de otimização, sem pprof público e com rollback documentado para alterações de ambiente de GC são bloqueadores comuns de merge.
Regras de Desempenho: Quando Otimizar é a política de consulta rápida.
Esta lista é o checklist operacional para equipes que executam essa política.
Alterações cosméticas ou de caminho frio sem alegação de desempenho.
Qualquer PR que anuncie melhorias de velocidade ou latência precisa de evidências.
O trabalho de medição é encorajado.
Mesclar reescritas de caminhos críticos ou ajuste de GC deve incluir a revisão de alguém que possa ler a saída de pprof e trace.
sync.Pool e inlining manual antes que perfis de heap provem alocações ou gargalos de CPU.
Meça primeiro.
Quando os branches de lançamento são cortados ou quando os gráficos planos de CPU mudam após grandes recursos.
Serviços estáveis geralmente atualizam mensalmente ou por lançamento.
A cultura de "meça primeiro" se aplica.
Ferramentas de perfilagem diferem - verifique as restrições de placa e runtime por meio de fixações de manifesto.
Sim para benchmarks em pacotes críticos, lint proibindo http.Get em manipuladores e portões de carga de staging.
O ajuste de GC continua sendo uma etapa manual de canary.
Versões de Stack: Esta página foi escrita para Go 1.26.x (Green Tea GC padrão, go fix modernizers - verifique o patch na compilação), chi (última versão - verifique na compilação), gin (última versão - verifique na compilação), echo (última versão - verifique na compilação), google.golang.org/grpc (última versão - verifique na compilação), sigs.k8s.io/controller-runtime (última versão - verifique na compilação), kubebuilder (última versão - verifique na compilação), tinygo (última versão - verifique os alvos de placa na compilação), wazero (última versão - verifique na compilação) e golangci-lint (última versão - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026