Prácticas recomendadas de rendimiento
Árbol de decisión de optimización y cuándo dejar de ajustar.
Busca en todas las páginas de la documentación
Árbol de decisión de optimización y cuándo dejar de ajustar.
Aplica estas reglas en revisiones de diseño, postmortems de incidentes y PRs de optimización para que el equipo mida primero, cambie una variable a la vez y se detenga cuando se cumplan los SLOs.
go test -bench / benchstat para cambios en bibliotecas. Las micro-afirmaciones necesitan micro-pruebas.GOMAXPROCS y la configuración del generador de carga en los PRs. Los números sin contexto no son reproducibles.net/http suele ser tu manejador.alloc_space de heap cuando la GC o la latencia de cola importan. La rotación de asignaciones impulsa la frecuencia de las pausas.-gcflags=-m) cuando benchmem muestra asignaciones sorprendentes. Los hechos del compilador superan las suposiciones.make([]T, 0, n) y las sugerencias de mapas reducen las copias de crecimiento.strings.Builder en bucles. Evita la concatenación += en middleware críticos.sync.Pool solo después de obtener ganancias medibles en asignaciones. Los pools añaden complejidad y riesgo de estado obsoleto.[]byte. Los picos de memoria se convierten en eventos de GC bajo carga.default.pgo en los trenes de lanzamiento para obtener binarios estables limitados por CPU. Los perfiles obsoletos engañan al compilador.GOMEMLIMIT cerca de los límites de memoria del pod antes de que se repitan los incidentes OOM. El límite suave activa la GC antes, no una capacidad mágica.GOGC en canarios con p99 y barreras de protección de CPU. Documenta las variables de entorno de reversión en el manual de operaciones./debug/pprof público es un riesgo de seguridad y DoS.Transport por cada upstream. http.DefaultClient no tiene tiempo de espera.GOMAXPROCS con la cuota de CPU del contenedor. La latencia de la cola ejecutable aparece en los rastreos cuando no coinciden.unsafe y //go:noinline como excepciones revisadas. Requiere evidencia de ADR o benchmark.Los niveles A a C deben cumplirse antes de que los experimentos del Nivel D se envíen a producción.
Si la latencia p99, la tasa de error y las métricas de costo cumplen los SLOs acordados, pospón la optimización adicional hasta la próxima regresión medida.
La claridad gana la revisión por defecto a menos que la evidencia muestre una excepción de ruta crítica.
Perfiles o benchmarks para PRs solo de optimización, no pprof público y reversión documentada para cambios de entorno de GC son bloqueadores de fusión comunes.
Reglas de rendimiento: Cuándo optimizar es la hoja de trucos de la política.
Esta lista es la lista de verificación operativa para los equipos que ejecutan esa política.
Cambios cosméticos o de ruta fría sin reclamo de rendimiento.
Cualquier PR que anuncie mejoras de velocidad o latencia necesita evidencia.
Se fomenta el trabajo de medición.
La fusión de reescrituras de rutas críticas o el ajuste de GC debe incluir la revisión de alguien que pueda leer la salida de pprof y rastreo.
sync.Pool e inlining manual antes de que los perfiles de heap demuestren puntos críticos de asignación o CPU.
Mide primero.
Cuando se cortan las ramas de lanzamiento o cuando los gráficos planos de CPU cambian después de las características principales.
Los servicios estables a menudo se actualizan mensualmente o por lanzamiento.
La cultura de medir primero se aplica.
Las herramientas de perfilado difieren; verifica las restricciones de la placa y el tiempo de ejecución en el momento de la compilación según los pines del manifiesto.
Sí, para benchmarks en paquetes críticos, lint que prohíbe http.Get en manejadores y puertas de carga de staging.
El ajuste de GC sigue siendo un paso manual de canario.
Versiones de pila: Esta página fue escrita para Go 1.26.x (Green Tea GC por defecto, go fix modernizers - verifica el parche en la compilación), chi (última versión - verifica en la compilación), gin (última versión - verifica en la compilación), echo (última versión - verifica en la compilación), google.golang.org/grpc (última versión - verifica en la compilación), sigs.k8s.io/controller-runtime (última versión - verifica en la compilación), kubebuilder (última versión - verifica en la compilación), tinygo (última versión - verifica los objetivos de la placa en la compilación), wazero (última versión - verifica en la compilación) y golangci-lint (última versión - verifica el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 18 jul 2026