diff --git a/main.go b/main.go index 3e2ac77..2fbef68 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "os" "os/signal" "runtime" + "runtime/pprof" "time" ) @@ -26,6 +27,11 @@ func main() { logger.Info("godns %s start", settings.Version) + if settings.Debug { + go profileCPU() + go profileMEM() + } + sig := make(chan os.Signal) signal.Notify(sig, os.Interrupt) @@ -40,6 +46,35 @@ forever: } +func profileCPU() { + f, err := os.Create("godns.cprof") + if err != nil { + logger.Error("%s", err) + return + } + + pprof.StartCPUProfile(f) + time.AfterFunc(6*time.Minute, func() { + pprof.StopCPUProfile() + f.Close() + + }) +} + +func profileMEM() { + f, err := os.Create("godns.mprof") + if err != nil { + logger.Error("%s", err) + return + } + + time.AfterFunc(5*time.Minute, func() { + pprof.WriteHeapProfile(f) + f.Close() + }) + +} + func initLogger() { logger = NewLogger()