Merge pull request #127 from colincross/memprofile

Add support for memory profiling
This commit is contained in:
colincross 2016-10-12 11:16:42 -07:00 committed by GitHub
commit 53d4357592

View file

@ -22,6 +22,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"runtime" "runtime"
"runtime/debug"
"runtime/pprof" "runtime/pprof"
"runtime/trace" "runtime/trace"
@ -34,8 +35,10 @@ var (
depFile string depFile string
docFile string docFile string
cpuprofile string cpuprofile string
memprofile string
traceFile string traceFile string
runGoTests bool runGoTests bool
noGC bool
BuildDir string BuildDir string
SrcDir string SrcDir string
@ -48,6 +51,8 @@ func init() {
flag.StringVar(&docFile, "docs", "", "build documentation file to output") flag.StringVar(&docFile, "docs", "", "build documentation file to output")
flag.StringVar(&cpuprofile, "cpuprofile", "", "write cpu profile to file") flag.StringVar(&cpuprofile, "cpuprofile", "", "write cpu profile to file")
flag.StringVar(&traceFile, "trace", "", "write trace to file") flag.StringVar(&traceFile, "trace", "", "write trace to file")
flag.StringVar(&memprofile, "memprofile", "", "write memory profile to file")
flag.BoolVar(&noGC, "nogc", false, "turn off GC for debugging")
flag.BoolVar(&runGoTests, "t", false, "build and run go tests during bootstrap") flag.BoolVar(&runGoTests, "t", false, "build and run go tests during bootstrap")
} }
@ -58,6 +63,10 @@ func Main(ctx *blueprint.Context, config interface{}, extraNinjaFileDeps ...stri
runtime.GOMAXPROCS(runtime.NumCPU()) runtime.GOMAXPROCS(runtime.NumCPU())
if noGC {
debug.SetGCPercent(-1)
}
if cpuprofile != "" { if cpuprofile != "" {
f, err := os.Create(cpuprofile) f, err := os.Create(cpuprofile)
if err != nil { if err != nil {
@ -160,6 +169,15 @@ func Main(ctx *blueprint.Context, config interface{}, extraNinjaFileDeps ...stri
fatalf("error removing abandoned files: %s", err) fatalf("error removing abandoned files: %s", err)
} }
} }
if memprofile != "" {
f, err := os.Create(memprofile)
if err != nil {
fatalf("error opening memprofile: %s", err)
}
defer f.Close()
pprof.WriteHeapProfile(f)
}
} }
func fatalf(format string, args ...interface{}) { func fatalf(format string, args ...interface{}) {