go-profiler-notes/guide/memory-profiler.go
2021-09-12 13:16:39 +02:00

45 lines
590 B
Go

// +build ignore
package main
import (
"fmt"
"os"
"runtime"
"runtime/pprof"
"time"
)
func main() {
file, _ := os.Create("./memory-profiler.pprof")
defer pprof.Lookup("allocs").WriteTo(file, 0)
defer runtime.GC()
go allocSmall()
go allocBig()
time.Sleep(1 * time.Second)
var m runtime.MemStats
runtime.ReadMemStats(&m)
fmt.Printf("%#v\n", m)
}
//go:noinline
func allocSmall() {
for i := 0; ; i++ {
_ = alloc(32)
}
}
//go:noinline
func allocBig() {
for i := 0; ; i++ {
_ = alloc(256)
}
}
//go:noinline
func alloc(size int) []byte {
return make([]byte, size)
}