diff --git a/core/collection/ring.go b/core/collection/ring.go index e43379c1..c7ad4fcb 100644 --- a/core/collection/ring.go +++ b/core/collection/ring.go @@ -1,8 +1,6 @@ package collection -import ( - "sync" -) +import "sync" // A Ring can be used as fixed size ring. type Ring struct { diff --git a/core/proc/signals.go b/core/proc/signals.go index f4a57b08..bbc41ce5 100644 --- a/core/proc/signals.go +++ b/core/proc/signals.go @@ -6,18 +6,20 @@ import ( "os" "os/signal" "syscall" + "time" "github.com/zeromicro/go-zero/core/logx" ) -const timeFormat = "0102150405" +const ( + profileDuration = time.Minute + timeFormat = "0102150405" +) var done = make(chan struct{}) func init() { go func() { - var profiler Stopper - // https://golang.org/pkg/os/signal/#Notify signals := make(chan os.Signal, 1) signal.Notify(signals, syscall.SIGUSR1, syscall.SIGUSR2, syscall.SIGTERM, syscall.SIGINT) @@ -28,12 +30,11 @@ func init() { case syscall.SIGUSR1: dumpGoroutines(fileCreator{}) case syscall.SIGUSR2: - if profiler == nil { - profiler = StartProfile() - } else { + profiler := StartProfile() + go func() { + <-time.After(profileDuration) profiler.Stop() - profiler = nil - } + }() case syscall.SIGTERM: stopOnSignal() gracefulStop(signals, syscall.SIGTERM)