Perfilado del heap y de las asignaciones
Detección de zonas problemáticas de memoria mediante perfiles del heap
Perfilado del heap y de las asignaciones es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.
¿Por qué perfilar el heap?
Las asignaciones excesivas de memoria ralentizan los programas de Go debido a la presión sobre el GC. El perfilado del heap muestra qué rutas de código asignan más memoria, para que pueda reducir las asignaciones.
Capturar un perfil del heap
Mediante el punto de conexión HTTP (requiere net/http/pprof):
go tool pprof http://localhost:6060/debug/pprof/heapPerfil del heap basado en archivos
Escriba un perfil del heap en cualquier momento mediante runtime/pprof:
f, _ := os.Create("mem.prof")
pprof.WriteHeapProfile(f)
f.Close()Inuse frente a alloc
El perfil del heap tiene dos vistas: inuse_objects/inuse_space (objetos y espacio actualmente activos) y alloc_objects/alloc_space (total desde el inicio). Use alloc_space para encontrar las rutas de asignación más activas.
go tool pprof -alloc_space http://localhost:6060/debug/pprof/heapgo test -memprofile
Capture el perfil de memoria durante los benchmarks:
go test -memprofile mem.prof -benchmem -bench=BenchmarkProcess ./...MemStats
Lea mediante programación las estadísticas de memoria del runtime para realizar una monitorización activa:
var ms runtime.MemStats
runtime.ReadMemStats(&ms)
fmt.Printf("Alloc: %v MiB\n", ms.Alloc/1024/1024)
fmt.Printf("NumGC: %v\n", ms.NumGC)Análisis de escape
Las variables que escapan al heap provocan asignaciones. Ejecute go build -gcflags=-m para ver qué variables escapan y por qué.
go build -gcflags="-m -m" ./...
// main.go:12:15: &User{...} escapes to heapReducir asignaciones: preasignar
Preasigne slices con make([]T, 0, n) cuando conozca la longitud final, para evitar reasignaciones repetidas a medida que crece el slice.
results := make([]Result, 0, len(input))sync.Pool para reutilización
Use sync.Pool para reutilizar objetos (buffers, slices auxiliares) y amortizar el coste de las asignaciones:
var pool = sync.Pool{
New: func() any { return new(bytes.Buffer) },
}
buf := pool.Get().(*bytes.Buffer)
buf.Reset()
// use buf...
pool.Put(buf)Receptores por valor frente a receptores por puntero
Las estructuras grandes que se pasan por valor se copian en cada llamada. Páselas por puntero para evitar la copia, pero tenga en cuenta que los punteros pueden hacer que el valor escape al heap.
String frente a []byte
Convertir entre string y []byte provoca una asignación. Use []byte en todas las rutas críticas y conviértalo a string únicamente en el límite donde se requiera un string.
Comprobación rápida
¿Qué muestra -alloc_space en un perfil del heap de pprof?
Resumen: perfilado del heap
Puntos clave:
- -alloc_space muestra las asignaciones totales; inuse_space muestra las activas
- go build -gcflags=-m muestra el análisis de escape
- Preasigne slices; use sync.Pool para la reutilización frecuente
- runtime.ReadMemStats para la monitorización mediante programación
Preguntas frecuentes
¿La lección «Perfilado del heap y de las asignaciones» es gratis?
Sí — el texto completo de «Perfilado del heap y de las asignaciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Perfilado del heap y de las asignaciones»?
Detección de zonas problemáticas de memoria mediante perfiles del heap Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Go Academy?
No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Perfilado del heap y de las asignaciones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Go Academy?
Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Escritura de benchmarks con testing.B
- Perfilado de CPU con pprof
- Perfilado del heap y de las asignaciones
- Trazado de la ejecución