github.com/joshprzybyszewski/masyu@v0.0.0-20230508015604-f31a025f6e7e/profile/start.go (about) 1 package profile 2 3 import ( 4 "log" 5 "os" 6 "runtime" 7 "runtime/pprof" 8 ) 9 10 const ( 11 cpuProfileFilename = `cpu.pprof` 12 memoryProfileFilename = `mem.pprof` 13 ) 14 15 func Start() func() { 16 f, err := os.Create(cpuProfileFilename) 17 if err != nil { 18 log.Printf("got error attempting to create cpu file: %q\n", err) 19 return func() {} 20 } 21 22 err = pprof.StartCPUProfile(f) 23 if err != nil { 24 log.Printf("got error attempting to start a profile: %q\n", err) 25 return func() {} 26 } 27 28 return func() { 29 pprof.StopCPUProfile() 30 err = f.Close() 31 if err != nil { 32 log.Printf("got error attempting to close profile file: %q\n", err) 33 } 34 35 f, err := os.Create(memoryProfileFilename) 36 if err != nil { 37 log.Printf("got error attempting to create memory file: %q\n", err) 38 return 39 } 40 defer f.Close() // error handling omitted for example 41 runtime.GC() // get up-to-date statistics 42 if err := pprof.WriteHeapProfile(f); err != nil { 43 log.Printf("got error attempting to write memory file: %q\n", err) 44 } 45 } 46 }