This is the pprof tool for visualization and analysis of profiling data, wrapped as an R package. It exports a single function which returns the path to the executable file.
The pprof
binary can also be installed via go get github.com/google/pprof
. However, some operating systems have an incompatible version of pprof
on the PATH
by default. This R package offers an easy-to-use robust alternative.
You can install pprof from GitHub with:
# install.packages("devtools")
devtools::install_github("r-prof/r-pprof")
invisible(processx::run(
pprof::get_pprof_pkg_path(),
"-help",
echo = TRUE,
error_on_status = FALSE
))
#> usage:
#>
#> Produce output in the specified format.
#>
#> pprof <format> [options] [binary] <source> ...
#>
#> Omit the format to get an interactive shell whose commands can be used
#> to generate various views of a profile
#>
#> pprof [options] [binary] <source> ...
#>
#> Omit the format and provide the "-http" flag to get an interactive web
#> interface at the specified host:port that can be used to navigate through
#> various views of a profile.
#>
#> pprof -http [host]:[port] [options] [binary] <source> ...
#>
#> Details:
#> Output formats (select at most one):
#> -callgrind Outputs a graph in callgrind format
#> -comments Output all profile comments
#> -disasm Output assembly listings annotated with samples
#> -dot Outputs a graph in DOT format
#> -eog Visualize graph through eog
#> -evince Visualize graph through evince
#> -gif Outputs a graph image in GIF format
#> -gv Visualize graph through gv
#> -kcachegrind Visualize report in KCachegrind
#> -list Output annotated source for functions matching regexp
#> -pdf Outputs a graph in PDF format
#> -peek Output callers/callees of functions matching regexp
#> -png Outputs a graph image in PNG format
#> -proto Outputs the profile in compressed protobuf format
#> -ps Outputs a graph in PS format
#> -raw Outputs a text representation of the raw profile
#> -svg Outputs a graph in SVG format
#> -tags Outputs all tags in the profile
#> -text Outputs top entries in text form
#> -top Outputs top entries in text form
#> -topproto Outputs top entries in compressed protobuf format
#> -traces Outputs all profile samples in text form
#> -tree Outputs a text rendering of call graph
#> -web Visualize graph through web browser
#> -weblist Display annotated source in a web browser
#>
#> Options:
#> -call_tree Create a context-sensitive call tree
#> -compact_labels Show minimal headers
#> -divide_by Ratio to divide all samples before visualization
#> -drop_negative Ignore negative differences
#> -edgefraction Hide edges below <f>*total
#> -focus Restricts to samples going through a node matching regexp
#> -hide Skips nodes matching regexp
#> -ignore Skips paths going through any nodes matching regexp
#> -mean Average sample value over first value (count)
#> -nodecount Max number of nodes to show
#> -nodefraction Hide nodes below <f>*total
#> -normalize Scales profile based on the base profile.
#> -output Output filename for file-based outputs
#> -positive_percentages Ignore negative samples when computing percentages
#> -prune_from Drops any functions below the matched frame.
#> -relative_percentages Show percentages relative to focused subgraph
#> -sample_index Sample value to report (0-based index or name)
#> -show Only show nodes matching regexp
#> -source_path Search path for source files
#> -tagfocus Restricts to samples with tags in range or matched by regexp
#> -taghide Skip tags matching this regexp
#> -tagignore Discard samples with tags in range or matched by regexp
#> -tagshow Only consider tags matching this regexp
#> -trim Honor nodefraction/edgefraction/nodecount defaults
#> -unit Measurement units to display
#>
#> Option groups (only set one per group):
#> cumulative
#> -cum Sort entries based on cumulative weight
#> -flat Sort entries based on own weight
#> granularity
#> -addresses Aggregate at the function level.
#> -addressnoinlines Aggregate at the function level, including functions' addresses in the output.
#> -files Aggregate at the file level.
#> -functions Aggregate at the function level.
#> -lines Aggregate at the source code line level.
#> -noinlines Aggregate at the function level.
#>
#> Source options:
#> -seconds Duration for time-based profile collection
#> -timeout Timeout in seconds for profile collection
#> -buildid Override build id for main binary
#> -add_comment Free-form annotation to add to the profile
#> Displayed on some reports or with pprof -comments
#> -base source Source of profile to use as baseline
#> profile.pb.gz Profile in compressed protobuf format
#> legacy_profile Profile in legacy pprof format
#> http://host/profile URL for profile handler to retrieve
#> -symbolize= Controls source of symbol information
#> none Do not attempt symbolization
#> local Examine only local binaries
#> fastlocal Only get function names from local binaries
#> remote Do not examine local binaries
#> force Force re-symbolization
#> Binary Local path or build id of binary for symbolization
#>
#>
#> Misc options:
#> -http Provide web based interface at host:port.
#> Host is optional and 'localhost' by default.
#> Port is optional and a randomly available port by default.
#> -tools Search path for object tools
#>
#> Legacy convenience options:
#> -inuse_space Same as -sample_index=inuse_space
#> -inuse_objects Same as -sample_index=inuse_objects
#> -alloc_space Same as -sample_index=alloc_space
#> -alloc_objects Same as -sample_index=alloc_objects
#> -total_delay Same as -sample_index=delay
#> -contentions Same as -sample_index=contentions
#> -mean_delay Same as -mean -sample_index=delay
#>
#> Environment Variables:
#> PPROF_TMPDIR Location for saved profiles (default $HOME/pprof)
#> PPROF_TOOLS Search path for object-level tools
#> PPROF_BINARY_PATH Search path for local binary files
#> default: $HOME/pprof/binaries
#> finds binaries by $name and $buildid/$name
#> * On Windows, %USERPROFILE% is used instead of $HOME