How to profile a Go application with pprof
Step 1
Install dependencies:
apt-get install graphviz gv 
or 
brew install graphviz Step 2
Download pprof to your application
go get -u github.com/google/pprof
Step 3
Import pprof to your application
import _ "net/http/pprof"Step 4
Add pprof server to application e.g. main.go
package main
import (
    "fmt"
    "sync"
    _ "net/http/pprof"
)
func main() {
    var wg sync.WaitGroup
    // Server for pprof
    go func() {
        fmt.Println(http.ListenAndServe("localhost:6060", nil))
    }()
    wg.Add(1) // pprof - so we won't exit prematurely
    
    wg.Wait()
}Analysis
Memory
Access heap pprof report e.g. via port forwarding 
go tool pprof http://localhost:PORT/debug/pprof/heapthen type png you will get an image report about heap usage of your application
Go Routines
Access heap pprof report e.g. via port forwarding 
go tool pprof http://localhost:PORT/debug/pprof/goroutinethen type png you will get an image report about methods with high go routine count
Further analysis:
- CPU: profile?seconds=10
- Goroutine blocking: block
- Locks: mutex
- Tracing: trace?seconds=5