diff --git a/config/graceful_shutdown.go b/config/graceful_shutdown.go index 1119c3a531668c08101b86b89402a02142c6ac86..fedb2c15ecdab62d17f0a4e83c45522f1c18acb0 100644 --- a/config/graceful_shutdown.go +++ b/config/graceful_shutdown.go @@ -21,7 +21,6 @@ import ( "os" "os/signal" "runtime/debug" - "syscall" "time" ) @@ -66,18 +65,18 @@ func GracefulShutdownInit() { // gracefulShutdownOnce.Do(func() { BeforeShutdown() - switch sig { // those signals' original behavior is exit with dump ths stack, so we try to keep the behavior - // syscall.SIGSYS will be ignored. It's not supported in windows platform. - case syscall.SIGQUIT, syscall.SIGILL, syscall.SIGTRAP, - syscall.SIGABRT: - debug.WriteHeapDump(os.Stdout.Fd()) - default: - time.AfterFunc(totalTimeout(), func() { - logger.Warn("Shutdown gracefully timeout, application will shutdown immediately. ") - os.Exit(0) - }) + for _, dumpSignal := range DumpHeapShutdownSignals { + if sig == dumpSignal { + debug.WriteHeapDump(os.Stdout.Fd()) + } } + + time.AfterFunc(totalTimeout(), func() { + logger.Warn("Shutdown gracefully timeout, application will shutdown immediately. ") + os.Exit(0) + }) + os.Exit(0) } }() diff --git a/config/graceful_shutdown_signal_unix.go b/config/graceful_shutdown_signal_unix.go index 6333a00220f5857940b7e523e729b9c0c0b782d8..59c1a5d149c2e9db8e9ac981adec107cafc863ad 100644 --- a/config/graceful_shutdown_signal_unix.go +++ b/config/graceful_shutdown_signal_unix.go @@ -25,3 +25,6 @@ import ( var ShutdownSignals = []os.Signal{os.Interrupt, os.Kill, syscall.SIGKILL, syscall.SIGSTOP, syscall.SIGHUP, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGILL, syscall.SIGTRAP, syscall.SIGABRT, syscall.SIGSYS} + +var DumpHeapShutdownSignals = []os.Signal{syscall.SIGQUIT, syscall.SIGILL, + syscall.SIGTRAP, syscall.SIGABRT, syscall.SIGSYS} diff --git a/config/graceful_shutdown_signal_windows.go b/config/graceful_shutdown_signal_windows.go index ff7a48113c14512e7874638911df0970cadf679e..91b2bce7c2311ecbe9a1255be3e7b7b357a9b403 100644 --- a/config/graceful_shutdown_signal_windows.go +++ b/config/graceful_shutdown_signal_windows.go @@ -25,3 +25,5 @@ import ( var ShutdownSignals = []os.Signal{os.Interrupt, os.Kill, syscall.SIGKILL, syscall.SIGHUP, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGILL, syscall.SIGTRAP, syscall.SIGABRT} + +var DumpHeapShutdownSignals = []os.Signal{syscall.SIGQUIT, syscall.SIGILL, syscall.SIGTRAP, syscall.SIGABRT}