Sobes.tech
Middle

Como integrar o profiler padrão na sua aplicação em Go?

sobes.tech IA

Resposta da IA

O pacote net/http/pprof fornece manipuladores HTTP para dados de profiling.

Importe-o:

import (
	"net/http"
	_ "net/http/pprof" // É importante usar '_' para inicialização com efeito colateral
)

Execute um servidor HTTP numa goroutine separada:

go func() {
	// Iniciar o servidor no endereço local e na porta padrão do pprof
	if err := http.ListenAndServe("localhost:6060", nil); err != nil {
		// Lidar com erro ao iniciar o servidor, por exemplo, registar no log
		// log.Printf("falha no servidor pprof: %v", err)
	}
}()

Agora pode aceder aos dados de profiling em http://localhost:6060/debug/pprof/.

Principais endpoints disponíveis:

  • /debug/pprof/: Página principal com a lista de perfis disponíveis.
  • /debug/pprof/heap: Perfil do heap.
  • /debug/pprof/goroutine: Perfil de goroutines ativas.
  • /debug/pprof/block: Perfil de bloqueios.
  • /debug/pprof/threadcreate: Perfil de criação de threads do sistema operativo.
  • /debug/pprof/cmdline: Linha de comandos da aplicação.
  • /debug/pprof/profile: Perfil de CPU (por padrão, recolhe dados durante 30 segundos).
  • /debug/pprof/trace: Perfil de rastreamento de execução (por padrão, recolhe dados durante 1 segundo).

Para analisar perfis de CPU, heap e bloqueios, normalmente usa-se a ferramenta 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 do heap

Para análise de rastreamento de execução, usa-se a ferramenta go tool trace:

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

Importante: Lembre-se da segurança e não abra a porta pprof ao público sem autorização em produção.