You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
package main
import (
"net/http"
_ "net/http/pprof"
)
var sink []byte
func main() {
for i := 0; i < 10; i++ {
sink = make([]byte, 1<<20)
}
panic(http.ListenAndServe("127.0.0.1:8080", nil))
}
test.sh:
#!/usr/bin/env bash
go version
go build -o ./server ./main.go
./server &
server="$!"
sleep 1
go tool pprof -raw -output=/dev/null -inuse_space 'http://127.0.0.1:8080/debug/pprof/heap'
echo '--- loops now ---'
for tool in "go tool pprof" "pprof"; do
for record_style in "" "-inuse_space" "-alloc_space"; do
$tool $record_style -proto -symbolize=remote -output ./heap.pb.gz http://127.0.0.1:8080/debug/pprof/heap &>/dev/null
for view_style in "-inuse_space" "-alloc_space"; do
$tool $view_style -top ./heap.pb.gz &>/dev/null || printf "failed tool=%q record=%q view=%q\n" "$tool" "$record_style" "$view_style"
done
rm ./heap.pb.gz &>/dev/null
done
done
kill -KILL -- "$server"
rm ./server
What did you expect to see?
I expected cmd/pprof to be able to show "inuse" space and allocation count profiles from the new gzipped-protobuf-formatted profiles generated by runtime/pprof and net/http/pprof.
What did you see instead?
The go tool pprof command prints help text followed by the message "option -inuse_space not valid for this profile" when asked to show the in-use space from a debug=0 profile at tip.
The pprof command from github.com/google/pprof correctly interprets the profiles.
$ ./test.sh
go version devel +be8a6fd2e3 Wed Dec 7 17:09:37 2016 +0000 darwin/amd64
Fetching profile from http://127.0.0.1:8080/debug/pprof/heap
Saved profile in /Users/rhys/pprof/pprof.127.0.0.1:8080.alloc_objects.alloc_space.inuse_objects.inuse_space.008.pb.gz
usage: pprof [options] [binary] <profile source> ...
Output format (only set one):
-callgrind Outputs a graph in callgrind format
-disasm=p Output annotated assembly for functions matching regexp or address
-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
-list=p Output annotated source for functions matching regexp
-pdf Outputs a graph in PDF format
-peek=p 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
-tree Outputs a text rendering of call graph
-web Visualize graph through web browser
-weblist=p Output annotated source in HTML for functions matching regexp or address
Output file parameters (for file-based output formats):
-output=f Generate output on file f (stdout by default)
Output granularity (only set one):
-functions Report at function level [default]
-files Report at source file level
-lines Report at source line level
-addresses Report at address level
Comparison options:
-base <profile> Show delta from this profile
-drop_negative Ignore negative differences
Sorting options:
-cum Sort by cumulative data
Dynamic profile options:
-seconds=N Length of time for dynamic profiles
Profile trimming options:
-nodecount=N Max number of nodes to show
-nodefraction=f Hide nodes below <f>*total
-edgefraction=f Hide edges below <f>*total
Sample value selection option (by index):
-sample_index Index of sample value to display
-mean Average sample value over first value
Sample value selection option (for heap profiles):
-inuse_space Display in-use memory size
-inuse_objects Display in-use object counts
-alloc_space Display allocated memory size
-alloc_objects Display allocated object counts
Sample value selection option (for contention profiles):
-total_delay Display total delay at each region
-contentions Display number of delays at each region
-mean_delay Display mean delay at each region
Filtering options:
-runtime Show runtime call frames in memory profiles
-focus=r Restricts to paths going through a node matching regexp
-ignore=r Skips paths going through any nodes matching regexp
-tagfocus=r Restrict to samples tagged with key:value matching regexp
Restrict to samples with numeric tags in range (eg "32kb:1mb")
-tagignore=r Discard samples tagged with key:value matching regexp
Avoid samples with numeric tags in range (eg "1mb:")
Miscellaneous:
-call_tree Generate a context-sensitive call tree
-unit=u Convert all samples to unit u for display
-divide_by=f Scale all samples by dividing them by f
-buildid=id Override build id for main binary in profile
-tools=path Search path for object-level tools
-help This message
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
option -inuse_space not valid for this profile
--- loops now ---
failed tool=go\ tool\ pprof record='' view=-inuse_space
failed tool=go\ tool\ pprof record=-inuse_space view=-inuse_space
failed tool=go\ tool\ pprof record=-inuse_space view=-alloc_space
failed tool=go\ tool\ pprof record=-alloc_space view=-inuse_space
The
go tool pprof
command cannot interpret gzipped-protobuf-formatted heap profiles in-inuse_space
or-inuse_objects
modes.What did you do?
Test cases are adapted from #16892.
main.go:
test.sh:
What did you expect to see?
I expected cmd/pprof to be able to show "inuse" space and allocation count profiles from the new gzipped-protobuf-formatted profiles generated by runtime/pprof and net/http/pprof.
What did you see instead?
The
go tool pprof
command prints help text followed by the message "option -inuse_space not valid for this profile" when asked to show the in-use space from a debug=0 profile at tip.The
pprof
command from github.com/google/pprof correctly interprets the profiles./cc @matloob @rauls5382
The text was updated successfully, but these errors were encountered: