Go has excellent built-in profiling tools. Here is how to use them.
Activating 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
Benchmarks¶
func BenchmarkMyFunc(b *testing.B) { for i := 0; i < b.N; i++ { MyFunc() } } go test -bench=. -benchmem
Optimization¶
- sync.Pool for repeated allocations
- Preallocate slices
- strings.Builder
- Buffered channels
Summary¶
pprof is built-in and powerful. CPU + heap covers 90% of problems.