From 1a2ab17200ed5a529d16548377fcb0ba446dc28e Mon Sep 17 00:00:00 2001 From: Jonas Knobloch Date: Wed, 13 May 2026 14:06:12 +0200 Subject: Refactor profiling helpers into module --- profile/profile.go | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 profile/profile.go (limited to 'profile/profile.go') diff --git a/profile/profile.go b/profile/profile.go new file mode 100644 index 0000000..5654ba1 --- /dev/null +++ b/profile/profile.go @@ -0,0 +1,64 @@ +package profile + +import ( + "flag" + "log" + "os" + "runtime" + "runtime/pprof" +) + +var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to `file`") +var memprofile = flag.String("memprofile", "", "write memory profile to `file`") + +func CPU() func() { + flag.Parse() + + if *cpuprofile == "" { + return nil + } + + var file *os.File + + if f, err := os.Create(*cpuprofile); err != nil { + log.Fatal("could not create CPU profile: ", err) + } else { + file = f + } + + if err := pprof.StartCPUProfile(file); err != nil { + log.Fatal("could not start CPU profile: ", err) + } + + return func() { + pprof.StopCPUProfile() + + if err := file.Close(); err != nil { + log.Fatal(err) + } + } +} + +func Mem() { + flag.Parse() + + if *memprofile == "" { + return + } + + var file *os.File + + if f, err := os.Create(*memprofile); err != nil { + log.Fatal("could not create memory profile: ", err) + } else { + file = f + + defer file.Close() + } + + runtime.GC() + + if err := pprof.Lookup("allocs").WriteTo(file, 0); err != nil { + log.Fatal("could not write memory profile: ", err) + } +} -- cgit v1.3.1