Sobes.tech
Senior

¿Cómo conectar un perfilador en Go? ¿Cómo tomar perfiles?

sobes.tech AI

Respuesta de la IA

En Go, se utilizan los paquetes net/http/pprof y runtime/pprof para el perfilado.

Para conectar el perfilador al servidor HTTP, basta con importar:

import _ "net/http/pprof"

y ejecutar el servidor HTTP, por ejemplo:

import (
    "net/http"
    _ "net/http/pprof"
)

func main() {
    go func() {
        http.ListenAndServe(":6060", nil)
    }()
    // resto del código de la aplicación
}

Después de iniciar, se pueden tomar perfiles accediendo a los endpoints:

  • http://localhost:6060/debug/pprof/profile — Perfil de CPU (por defecto 30 segundos)
  • http://localhost:6060/debug/pprof/heap — Perfil de memoria
  • http://localhost:6060/debug/pprof/goroutine — Estado de las goroutines

Para grabar el perfil de CPU en un archivo programáticamente:

import (
    "os"
    "runtime/pprof"
)

func main() {
    f, _ := os.Create("cpu.prof")
    pprof.StartCPUProfile(f)
    defer pprof.StopCPUProfile()

    // código a perfilar
}

Para analizar los perfiles, se usa el comando go tool pprof.