| [](https://github.com/google/pprof/actions) |
| [](https://codecov.io/gh/google/pprof) |
| [](https://pkg.go.dev/github.com/google/pprof/profile) |
| |
| # Introduction |
| |
| pprof is a tool for visualization and analysis of profiling data. |
| |
| pprof reads a collection of profiling samples in profile.proto format and |
| generates reports to visualize and help analyze the data. It can generate both |
| text and graphical reports (through the use of the dot visualization package). |
| |
| profile.proto is a protocol buffer that describes a set of callstacks |
| and symbolization information. A common usage is to represent a set of |
| sampled callstacks from statistical profiling. The format is |
| described on the [proto/profile.proto](./proto/profile.proto) file. For details on protocol |
| buffers, see https://developers.google.com/protocol-buffers |
| |
| Profiles can be read from a local file, or over http. Multiple |
| profiles of the same type can be aggregated or compared. |
| |
| If the profile samples contain machine addresses, pprof can symbolize |
| them through the use of the native binutils tools (addr2line and nm). |
| |
| **This is not an official Google product.** |
| |
| # Building pprof |
| |
| Prerequisites: |
| |
| - Go development kit of a [supported version](https://golang.org/doc/devel/release.html#policy). |
| Follow [these instructions](http://golang.org/doc/code.html) to prepare |
| the environment. |
| |
| - Graphviz: http://www.graphviz.org/ |
| Optional, used to generate graphic visualizations of profiles |
| |
| To build and install it: |
| |
| go install github.com/google/pprof@latest |
| |
| The binary will be installed `$GOPATH/bin` (`$HOME/go/bin` by default). |
| |
| # Basic usage |
| |
| pprof can read a profile from a file or directly from a server via http. |
| Specify the profile input(s) in the command line, and use options to |
| indicate how to format the report. |
| |
| ## Generate a text report of the profile, sorted by hotness: |
| |
| ``` |
| % pprof -top [main_binary] profile.pb.gz |
| Where |
| main_binary: Local path to the main program binary, to enable symbolization |
| profile.pb.gz: Local path to the profile in a compressed protobuf, or |
| URL to the http service that serves a profile. |
| ``` |
| |
| ## Generate a graph in an SVG file, and open it with a web browser: |
| |
| ``` |
| pprof -web [main_binary] profile.pb.gz |
| ``` |
| |
| ## Run pprof on interactive mode: |
| |
| If no output formatting option is specified, pprof runs on interactive mode, |
| where reads the profile and accepts interactive commands for visualization and |
| refinement of the profile. |
| |
| ``` |
| pprof [main_binary] profile.pb.gz |
| |
| This will open a simple shell that takes pprof commands to generate reports. |
| Type 'help' for available commands/options. |
| ``` |
| |
| ## Run pprof via a web interface |
| |
| If the `-http` flag is specified, pprof starts a web server at |
| the specified host:port that provides an interactive web-based interface to pprof. |
| Host is optional, and is "localhost" by default. Port is optional, and is a |
| random available port by default. `-http=":"` starts a server locally at |
| a random port. |
| |
| ``` |
| pprof -http=[host]:[port] [main_binary] profile.pb.gz |
| ``` |
| |
| The preceding command should automatically open your web browser at |
| the right page; if not, you can manually visit the specified port in |
| your web browser. |
| |
| ## Using pprof with Linux Perf |
| |
| pprof can read `perf.data` files generated by the |
| [Linux perf](https://perf.wiki.kernel.org/index.php/Main_Page) tool by using the |
| `perf_to_profile` program from the |
| [perf_data_converter](https://github.com/google/perf_data_converter) package. |
| |
| ## Viewing disassembly on Windows |
| |
| To view disassembly of profiles collected from Go programs compiled as Windows executables, |
| the executable must be built with `go build -buildmode=exe`. LLVM or GCC must be installed, |
| so required tools like `addr2line` and `nm` are available to `pprof`. |
| |
| ## Further documentation |
| |
| See [doc/README.md](doc/README.md) for more detailed end-user documentation. |
| |
| See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution documentation. |
| |
| See [proto/README.md](proto/README.md) for a description of the profile.proto format. |