Skip to content

Importing from pprof (go)

Jamie Wong edited this page Sep 26, 2018 · 1 revision

pprof is a tool for capturing profiling data for the Go programming language. The two most common ways of profiling go programs are by writing a .prof file to disk, and by downloading profiling information from a running server instrumented with net/http/pprof.

Importing from a .prof file written to disk

You can write CPU profiles to disk in a program via the pprof.StartCPUProfile and pprof.StopCPUProfile commands.

Let's say you have a program like this in simple.go.

// simple.go
package main

import "flag"
import "runtime/pprof"
import "os"

var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file")

func main() {
	if *cpuprofile != "" {
		f, _ := os.Create(*cpuprofile)
		defer pprof.StopCPUProfile()

	// Do the expensive stuff here

Then you can compile this program with go build simple.go, then run it with ./simple This will output a pprof profile to The resulting file can be dragged into, or opened directly with the CLI tool by running speedscope

Importing via the net/http/pprof server profiling

The net/http/pprof package offers an easy-to-use profiling integration for long-lived servers.

If you have a server set up like this, you can download various different profiles by visiting the profile index page found at http://localhost:$PORT/debug/pprof. All of the available profile types should be importable into speedscope with the exception of debug/pprof/trace, which uses a different file format that speedscope doesn't yet support.

Rather than downloading the file and dropping it into, if you have speedscope installed locally via npm install -g speedscope, you can also do e.g.:

curl http://localhost:$PORT/debug/pprof/profile?seconds=2 | speedscope -