Sobes.tech
Middle

Jak zintegrować standardowy profiler w swojej aplikacji Go?

sobes.tech AI

Odpowiedź od AI

Pakiet net/http/pprof zapewnia obsługę HTTP dla danych profilowania.

Zaimportuj go:

import (
	"net/http"
	_ "net/http/pprof" // Ważne jest użycie '_' do inicjalizacji efektów ubocznych
)

Uruchom serwer HTTP w osobnej goroutine:

go func() {
	// Uruchom serwer na lokalnym adresie i na standardowym porcie pprof
	if err := http.ListenAndServe("localhost:6060", nil); err != nil {
		// Obsłuż błąd uruchomienia serwera, np. logując
		// log.Printf("serwer pprof nie powiódł się: %v", err)
	}
}()

Teraz możesz uzyskać dostęp do danych profilowania pod adresem http://localhost:6060/debug/pprof/.

Główne dostępne punkty końcowe:

  • /debug/pprof/: Strona główna z listą dostępnych profili.
  • /debug/pprof/heap: Profil sterty.
  • /debug/pprof/goroutine: Profil aktywnych goroutine.
  • /debug/pprof/block: Profil blokad.
  • /debug/pprof/threadcreate: Profil tworzenia wątków OS.
  • /debug/pprof/cmdline: Linia poleceń aplikacji.
  • /debug/pprof/profile: Profil CPU (domyślnie zbiera dane przez 30 sekund).
  • /debug/pprof/trace: Profil śledzenia wykonania (domyślnie zbiera dane przez 1 sekundę).

Do analizy profili CPU, sterty i blokad zwykle używa się narzędzia go tool pprof:

go tool pprof http://localhost:6060/debug/pprof/profile # Profil CPU za 30 sekund
go tool pprof http://localhost:6060/debug/pprof/heap # Profil sterty

Do analizy śledzenia wykonania używa się narzędzia go tool trace:

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

Ważne: Pamiętaj o bezpieczeństwie i nie otwieraj portu pprof publicznie bez autoryzacji w produkcji.