Sobes.tech
Senior

Come collegare un profiler in Go? Come registrare i profili?

sobes.tech AI

Risposta dell'AI

In Go, vengono utilizzati i pacchetti net/http/pprof e runtime/pprof per il profiling.

Per collegare il profiler al server HTTP, basta importare:

import _ "net/http/pprof"

e avviare il server HTTP, ad esempio:

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

func main() {
    go func() {
        http.ListenAndServe(":6060", nil)
    }()
    // resto del codice dell'applicazione
}

Dopo l'avvio, è possibile acquisire profili accedendo agli endpoint:

  • http://localhost:6060/debug/pprof/profile — Profilo CPU (predefinito 30 secondi)
  • http://localhost:6060/debug/pprof/heap — Profilo della memoria
  • http://localhost:6060/debug/pprof/goroutine — Stato delle goroutine

Per registrare il profilo CPU in un file programmaticamente:

import (
    "os"
    "runtime/pprof"
)

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

    // codice da profilare
}

Per analizzare i profili si utilizza il comando go tool pprof.