Go pprof
Go pprof is a free, self-hosted profiling package and analysis tool for Go programs.
What Go pprof is
Go pprof is a free, self-hosted profiling package and analysis tool for Go programs. The runtime/pprof package writes runtime data in a format the pprof visualizer understands, while Go benchmarks can produce CPU and memory profiles through go test flags. The net/http/pprof package exposes live profiles under /debug/pprof/ and serves execution traces for go tool trace. Predefined profiles cover goroutines, goroutine leaks, allocations, heap, thread creation, blocking, and mutex contention. CPU profiling uses StartCPUProfile and StopCPUProfile, writing buffered output to an io.Writer. The go tool pprof command can summarize hot spots and open an interactive graph of hot spots and call graphs. Profile.WriteTo supports gzip-compressed protocol buffers or legacy text containing function names and line numbers. Labels can be attached to contexts and goroutines, although only CPU and goroutine profiles currently use them. Custom named profiles can track resources such as files or network connections. The package is licensed under BSD-3-Clause. Profile quality depends on kernel support, and Unix-like c-archive or c-shared builds have a stated CPU-profiling limitation.
Good
- Free BSD-3-Clause package
- CPU and memory profiling support
- Live HTTP profiles under /debug/pprof/
- Interactive hot-spot and call-graph views
- Multiple predefined runtime profiles
Watch out
- Profile quality depends on kernel support
- CPU profiling has Unix-like build-mode limitations
- Only CPU and goroutine profiles use labels
- CPU profiles require explicit start and stop
Who it suits
Go developers needing CPU, memory, goroutine, thread, blocking, mutex, or heap profiling can use Go pprof. It suits self-hosted workflows that analyze benchmark or live runtime data.
Verdict
Go pprof supplies profiling collection, HTTP exposure, and command-line visualization for Go applications. Its profile coverage is broad, but results depend on platform kernel support and build details.
The facts
Each one read from Go pprof's own pages, with the date it was checked.
What it does
- Analysis tool
- The Go command-line tool interprets and displays profiles of Go programs and can be invoked as go tool pprof binary profile.checked 3 Oct 2026
- CPU and memory profiling
- Go’s testing package supports profiling benchmarks with go test flags that write CPU and memory profiles.checked 3 Oct 2026
- CPU profile limit
- CPU profiling uses StartCPUProfile and StopCPUProfile because CPU profiles stream output to a writer rather than appearing as a Profile.checked 3 Oct 2026
- CPU profiling
- StartCPUProfile enables CPU profiling for the current process and writes buffered profile data to an io.Writer.checked 4 Oct 2026
- Custom profiles
- Packages can create and maintain named profiles, commonly to track resources that must be explicitly closed, such as files or network connections.checked 4 Oct 2026
- Heap profiling
- The heap profile reports allocation statistics from the most recently completed garbage collection, subject to the documented no-GC exception.checked 4 Oct 2026
- HTTP integration
- Importing net/http/pprof installs handlers under /debug/pprof/ for downloading live profiles.checked 4 Oct 2026
- HTTP profiles
- The net/http/pprof package serves live runtime profiles through HTTP handlers under /debug/pprof/.checked 3 Oct 2026
- Kernel caveat
- The documentation cautions that profiles are only as good as the kernel support used to generate them.checked 3 Oct 2026
- Labels
- Context labels can be attached to profiling data, and the documentation says only CPU and goroutine profiles currently use label information.checked 4 Oct 2026
- License
- The package documentation lists the license as BSD-3-Clause.checked 3 Oct 2026
- License and project
- Go is an open source project developed by a team at Google and community contributors, distributed under a BSD-style license.checked 4 Oct 2026
- Limits
- The documentation cautions that profile quality depends on kernel support and notes a Unix-like c-archive/c-shared CPU profiling limitation involving SIGPROF.checked 4 Oct 2026
- Profile format
- Profile.WriteTo can emit a gzip-compressed protocol buffer or a legacy text format with function names and line numbers.checked 3 Oct 2026
- Profile output
- Profile.WriteTo can write gzip-compressed protocol buffer data or a legacy text format, depending on its debug argument.checked 4 Oct 2026
- Profiles
- Predefined profiles cover goroutines, memory allocations, OS thread creation, blocking, and mutex contention.checked 4 Oct 2026
- Profile types
- The documented predefined profiles include goroutine, goroutineleak, allocs, heap, threadcreate, block, and mutex.checked 3 Oct 2026
- Purpose
- The runtime/pprof package writes runtime profiling data in the format expected by the pprof visualization tool.checked 4 Oct 2026
- Security reporting
- The Go project directs security-related reports to [email protected] and links to its security policy.checked 4 Oct 2026
- Support and community
- The Go project lists user discussion, developer, and code review mailing lists, and directs bug reports to its issue tracker.checked 4 Oct 2026
- Trace integration
- The HTTP profiling package serves execution trace data for use with the go tool trace command.checked 3 Oct 2026
- Visualization
- The Go documentation describes using go tool pprof to inspect profiles, including a top summary and an interactive call graph.checked 4 Oct 2026
Where it runs
- Platform caveat
- On Unix-like systems, CPU profiling does not work by default for Go code built with -buildmode=c-archive or -buildmode=c-shared.checked 3 Oct 2026
Alternatives to Go pprof
- 1
Grafana Cloud Application Observability
Free planAndroidiOSWebAPI8.4From $0.03 a month - 2
Grafana Alerting
Free planWebLinuxmacOSWindows6.8$0.03 usage-based - 3
YourKit .NET Profiler
Free planAPILinuxmacOSWindows6.8From $99 a year - 4

Amazon CodeGuru Profiler
Free planWebAPILinuxSelf-hosted6.7From $0.01 a month - 5
Pyroscope
Free planWebLinuxmacOSWindows6.7From $19 a month - 6

Parca
Free planWebAPILinuxSelf-hosted6.6Free plan
