Sobes.tech
Middle

¿Cómo integrar el perfilador estándar en su aplicación en Go?

sobes.tech AI

Respuesta de la IA

El paquete net/http/pprof proporciona manejadores HTTP para datos de perfilado.

Importarlo:

import (
	"net/http"
	_ "net/http/pprof" // Es importante usar '_' para inicialización con efecto secundario
)

Ejecute un servidor HTTP en una goroutine separada:

go func() {
	// Iniciar el servidor en la dirección local y el puerto estándar pprof
	if err := http.ListenAndServe("localhost:6060", nil); err != nil {
		// Manejar error al iniciar el servidor, por ejemplo, registrar en logs
		// log.Printf("servidor pprof falló: %v", err)
	}
}()

Ahora puede acceder a los datos de perfilado en http://localhost:6060/debug/pprof/.

Puntos finales principales disponibles:

  • /debug/pprof/: Página principal con la lista de perfiles disponibles.
  • /debug/pprof/heap: Perfil del heap.
  • /debug/pprof/goroutine: Perfil de goroutines activas.
  • /debug/pprof/block: Perfil de bloqueos.
  • /debug/pprof/threadcreate: Perfil de creación de hilos del sistema operativo.
  • /debug/pprof/cmdline: Línea de comandos de la aplicación.
  • /debug/pprof/profile: Perfil de CPU (recopila datos durante 30 segundos por defecto).
  • /debug/pprof/trace: Perfil de trazado de ejecución (recopila datos durante 1 segundo por defecto).

Para analizar perfiles de CPU, heap y bloqueos, generalmente se usa la utilidad go tool pprof:

go tool pprof http://localhost:6060/debug/pprof/profile # Perfil de CPU durante 30 segundos
go tool pprof http://localhost:6060/debug/pprof/heap # Perfil del heap

Para analizar trazas de ejecución, se usa la utilidad go tool trace:

go tool trace http://localhost:6060/debug/pprof/trace

Importante: Recuerde la seguridad y no abra el puerto con pprof al público sin autorización en producción.