Skip to content

Go Runtime Profiling

Configure the profiling server with these environment variables:

Key Type Description Default
PPROF_ENABLED boolean Enables Go's built-in runtime profiling endpoints. false
PPROF_PORT number Loopback port used by the profiling server when enabled. 6060

Profiling server is not exposed

The profiling server is intentionally bound to loopback and cannot be exposed through Docker port publishing.

The doco-cd image does not include a shell, so collect profiles through a helper container that shares its network namespace:

docker run --rm --network container:doco-cd curlimages/curl:latest \
  -sSf 'http://127.0.0.1:6060/debug/pprof/heap?gc=1' > heap.pb.gz

Use gc=1 for baseline and memory-growth comparisons. It forces garbage collection before the profile is collected, excluding objects that are no longer reachable but have not yet been reclaimed. Omit it only when investigating short-lived allocation spikes or garbage-collection behavior.

Compare two heap profiles with the Go toolchain:

go tool pprof -base before.pb.gz heap.pb.gz

See Go's pprof documentation for all available profiles and query parameters.