package util import ( "log" "os" "runtime/pprof" "runtime/trace" ) type Pprof struct { fc *os.File fm *os.File ft *os.File } func NewProf() *Pprof { fc, err := os.Create("./cpu.prof") if err != nil { log.Fatal(err) } fm, err := os.Create("./men.prof") if err != nil { log.Fatal(err) } ft, err := os.Create("./trace.out") if err != nil { log.Fatal(err) } p := &Pprof{ fc: fc, fm: fm, ft: ft, } p.Start() return p } func (p *Pprof) Start() { trace.Start(p.ft) pprof.StartCPUProfile(p.fc) } func (p *Pprof) Close() { pprof.WriteHeapProfile(p.fm) pprof.StopCPUProfile() trace.Stop() p.fc.Close() p.fm.Close() p.ft.Close() }