Sobes.tech
Senior

Como ligar um profiler em Go? Como tirar perfis?

sobes.tech IA

Resposta da IA

Em Go, utiliza-se o pacote net/http/pprof e o pacote runtime/pprof para profiling.

Para ligar o profiler ao servidor HTTP, basta importar:

import _ "net/http/pprof"

e iniciar o servidor HTTP, por exemplo:

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

func main() {
    go func() {
        http.ListenAndServe(":6060", nil)
    }()
    // resto do código da aplicação
}

Após iniciar, pode tirar perfis acessando os endpoints:

  • http://localhost:6060/debug/pprof/profile — Perfil de CPU (padrão de 30 segundos)
  • http://localhost:6060/debug/pprof/heap — Perfil de memória
  • http://localhost:6060/debug/pprof/goroutine — Estado das goroutines

Para gravar o perfil de CPU num ficheiro programaticamente:

import (
    "os"
    "runtime/pprof"
)

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

    // código a perfilar
}

Para análise de perfis, usa-se o comando go tool pprof.