Go má skvělé zabudované profiling nástroje. Jak je použít.
Aktivace pprof¶
import _ “net/http/pprof” go func() { log.Println(http.ListenAndServe(“:6060”, nil)) }()
CPU profiling¶
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30
Memory¶
go tool pprof http://localhost:6060/debug/pprof/heap
Goroutines¶
curl http://localhost:6060/debug/pprof/goroutine?debug=1
Flame graphs¶
go tool pprof -http=:8080 cpu.prof
Benchmarky¶
func BenchmarkMyFunc(b *testing.B) { for i := 0; i < b.N; i++ { MyFunc() } } go test -bench=. -benchmem
Optimalizace¶
- sync.Pool pro opakované alokace
- Prealokace slices
- strings.Builder
- Buffered channels
Praktický workflow profiling¶
Při optimalizaci Go aplikace postupujte systematicky: nejprve identifikujte bottleneck pomocí CPU profilu, poté analyzujte alokace pomocí heap profilu. Flame graph vizualizuje call stack a ukazuje, kde aplikace tráví nejvíce času — široké bloky znamenají horké cesty.
Go runtime poskytuje také trace nástroj (go tool trace), který zobrazuje detailní timeline goroutin, GC pauz a scheduler aktivit. Pro produkční aplikace povolte continuous profiling pomocí Pyroscope nebo Parca — sbíráte profily s minimálním overheadem a můžete analyzovat výkon retroaktivně. Klíčové optimalizace v Go: používejte sync.Pool pro opakované alokace, prealokujte slices s make([]T, 0, expectedSize) a preferujte strings.Builder před string konkatenací.
Shrnutí¶
pprof je zabudovaný a výkonný. CPU + heap stačí na 90 % problémů.