mirror of
https://github.com/golang/go.git
synced 2025-05-29 03:11:26 +00:00
runtime/pprof: write heap statistics to heap profile always
The heap statistics were only written if asked for a profile with debug > 0, but that also prints a stack trace for each profile line, which is comparatively much noisier. The statistics are short enough and separate enough (they only appear at the end) and useful enough that we can print them always. This means that people using -test.memprofile in tests will get a memory profile with statistics included now. Pprof won't care, but if people care to look, the numbers will be there. This avoids the need for hacks like using -memprofilerate=1 to find the number of allocations. Change-Id: I10a4f593403d0315aad11b37c6e554b734caa73f Reviewed-on: https://go-review.googlesource.com/9491 Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
ea426dcae1
commit
c26fc88d56
@ -56,6 +56,7 @@ reflect: add ArrayOf (https://golang.org/cl/4111)
|
||||
reflect: add FuncOf (https://golang.org/cl/1996)
|
||||
runtime, syscall: use SYSCALL instruction on FreeBSD (Go 1.5 now requires FreeBSD 8-STABLE+) (https://golang.org/cl/3020)
|
||||
runtime, syscall: use get_random_bytes syscall for NaCl (Go 1.5 now requires NaCl SDK pepper-39 or above) (https://golang.org/cl/1755)
|
||||
runtime/pprof: memory profiles include overall memory statistics by default (https://golang.org/cl/9491)
|
||||
strings: add Compare(x, y string) int, for symmetry with bytes.Compare (https://golang.org/cl/2828)
|
||||
syscall: Add Foreground and Pgid to SysProcAttr (https://golang.org/cl/5130)
|
||||
syscall: add missing Syscall9 for darwin/amd64 (https://golang.org/cl/6555)
|
||||
|
@ -442,35 +442,33 @@ func writeHeap(w io.Writer, debug int) error {
|
||||
|
||||
// Print memstats information too.
|
||||
// Pprof will ignore, but useful for people
|
||||
if debug > 0 {
|
||||
s := new(runtime.MemStats)
|
||||
runtime.ReadMemStats(s)
|
||||
fmt.Fprintf(w, "\n# runtime.MemStats\n")
|
||||
fmt.Fprintf(w, "# Alloc = %d\n", s.Alloc)
|
||||
fmt.Fprintf(w, "# TotalAlloc = %d\n", s.TotalAlloc)
|
||||
fmt.Fprintf(w, "# Sys = %d\n", s.Sys)
|
||||
fmt.Fprintf(w, "# Lookups = %d\n", s.Lookups)
|
||||
fmt.Fprintf(w, "# Mallocs = %d\n", s.Mallocs)
|
||||
fmt.Fprintf(w, "# Frees = %d\n", s.Frees)
|
||||
s := new(runtime.MemStats)
|
||||
runtime.ReadMemStats(s)
|
||||
fmt.Fprintf(w, "\n# runtime.MemStats\n")
|
||||
fmt.Fprintf(w, "# Alloc = %d\n", s.Alloc)
|
||||
fmt.Fprintf(w, "# TotalAlloc = %d\n", s.TotalAlloc)
|
||||
fmt.Fprintf(w, "# Sys = %d\n", s.Sys)
|
||||
fmt.Fprintf(w, "# Lookups = %d\n", s.Lookups)
|
||||
fmt.Fprintf(w, "# Mallocs = %d\n", s.Mallocs)
|
||||
fmt.Fprintf(w, "# Frees = %d\n", s.Frees)
|
||||
|
||||
fmt.Fprintf(w, "# HeapAlloc = %d\n", s.HeapAlloc)
|
||||
fmt.Fprintf(w, "# HeapSys = %d\n", s.HeapSys)
|
||||
fmt.Fprintf(w, "# HeapIdle = %d\n", s.HeapIdle)
|
||||
fmt.Fprintf(w, "# HeapInuse = %d\n", s.HeapInuse)
|
||||
fmt.Fprintf(w, "# HeapReleased = %d\n", s.HeapReleased)
|
||||
fmt.Fprintf(w, "# HeapObjects = %d\n", s.HeapObjects)
|
||||
fmt.Fprintf(w, "# HeapAlloc = %d\n", s.HeapAlloc)
|
||||
fmt.Fprintf(w, "# HeapSys = %d\n", s.HeapSys)
|
||||
fmt.Fprintf(w, "# HeapIdle = %d\n", s.HeapIdle)
|
||||
fmt.Fprintf(w, "# HeapInuse = %d\n", s.HeapInuse)
|
||||
fmt.Fprintf(w, "# HeapReleased = %d\n", s.HeapReleased)
|
||||
fmt.Fprintf(w, "# HeapObjects = %d\n", s.HeapObjects)
|
||||
|
||||
fmt.Fprintf(w, "# Stack = %d / %d\n", s.StackInuse, s.StackSys)
|
||||
fmt.Fprintf(w, "# MSpan = %d / %d\n", s.MSpanInuse, s.MSpanSys)
|
||||
fmt.Fprintf(w, "# MCache = %d / %d\n", s.MCacheInuse, s.MCacheSys)
|
||||
fmt.Fprintf(w, "# BuckHashSys = %d\n", s.BuckHashSys)
|
||||
fmt.Fprintf(w, "# Stack = %d / %d\n", s.StackInuse, s.StackSys)
|
||||
fmt.Fprintf(w, "# MSpan = %d / %d\n", s.MSpanInuse, s.MSpanSys)
|
||||
fmt.Fprintf(w, "# MCache = %d / %d\n", s.MCacheInuse, s.MCacheSys)
|
||||
fmt.Fprintf(w, "# BuckHashSys = %d\n", s.BuckHashSys)
|
||||
|
||||
fmt.Fprintf(w, "# NextGC = %d\n", s.NextGC)
|
||||
fmt.Fprintf(w, "# PauseNs = %d\n", s.PauseNs)
|
||||
fmt.Fprintf(w, "# NumGC = %d\n", s.NumGC)
|
||||
fmt.Fprintf(w, "# EnableGC = %v\n", s.EnableGC)
|
||||
fmt.Fprintf(w, "# DebugGC = %v\n", s.DebugGC)
|
||||
}
|
||||
fmt.Fprintf(w, "# NextGC = %d\n", s.NextGC)
|
||||
fmt.Fprintf(w, "# PauseNs = %d\n", s.PauseNs)
|
||||
fmt.Fprintf(w, "# NumGC = %d\n", s.NumGC)
|
||||
fmt.Fprintf(w, "# EnableGC = %v\n", s.EnableGC)
|
||||
fmt.Fprintf(w, "# DebugGC = %v\n", s.DebugGC)
|
||||
|
||||
if tw != nil {
|
||||
tw.Flush()
|
||||
|
Loading…
x
Reference in New Issue
Block a user