diff --git a/pkg/appsrv/appsrv.go b/pkg/appsrv/appsrv.go index 6aa7e059a09..61f731cae90 100644 --- a/pkg/appsrv/appsrv.go +++ b/pkg/appsrv/appsrv.go @@ -574,16 +574,20 @@ func (app *Application) ListenAndServeWithoutCleanup(addr, certFile, keyFile str func (app *Application) ListenAndServeTLSWithCleanup2(addr string, certFile, keyFile string, onStop func(), isMaster bool) { app.isTLS = true httpSrv := app.initServer(addr) + log.Infof("listen on %s, isMaster: %v, certFile: %s, keyFile: %s", addr, isMaster, certFile, keyFile) if isMaster { app.addDefaultHandlers() if app.enableProfiling { addPProfHandler("", app) } app.httpServer = httpSrv + log.Infof("----------register cleanShutdown") app.registerCleanShutdown(app.httpServer, onStop) + log.Infof("----------end register cleanShutdown") } else { app.slaveHttpServer = httpSrv } + log.Infof("[listenAndServeInternal] listen on %s, isMaster: %v, certFile: %s, keyFile: %s", addr, isMaster, certFile, keyFile) app.listenAndServeInternal(httpSrv, certFile, keyFile) if isMaster { app.waitCleanShutdown() diff --git a/pkg/hostman/host_services.go b/pkg/hostman/host_services.go index ef56e6ad6c3..c93a29f7c0e 100644 --- a/pkg/hostman/host_services.go +++ b/pkg/hostman/host_services.go @@ -17,6 +17,7 @@ package hostman import ( execlient "yunion.io/x/executor/client" "yunion.io/x/log" + "yunion.io/x/pkg/util/signalutils" "yunion.io/x/onecloud/pkg/appsrv" app_common "yunion.io/x/onecloud/pkg/cloudcommon/app" @@ -157,6 +158,10 @@ func (host *SHostService) initHandlers(app *appsrv.Application) { } func StartService() { + // register dump stack signal handler at first + signalutils.SetDumpStackSignal() + signalutils.StartTrap() + var srv = &SHostService{} srv.SServiceBase = &service.SServiceBase{ Service: srv, diff --git a/vendor/yunion.io/x/pkg/util/signalutils/signalutils.go b/vendor/yunion.io/x/pkg/util/signalutils/signalutils.go index 765308f9fce..6981bc76688 100644 --- a/vendor/yunion.io/x/pkg/util/signalutils/signalutils.go +++ b/vendor/yunion.io/x/pkg/util/signalutils/signalutils.go @@ -35,6 +35,7 @@ var signalManager *SSignalManager type Trap func() func RegisterSignal(trap Trap, sigs ...os.Signal) { + log.Infof("===RegisterSignal trap: %v, sigs: %#v", trap, sigs) signalManager.mtx.Lock() defer signalManager.mtx.Unlock() if !signalManager.started { @@ -66,12 +67,16 @@ func StartTrap() { debug.PrintStack() } }() - signalManager.mtx.RLock() - defer signalManager.mtx.RUnlock() for { s := <-signalManager.sig - trapFunc := signalManager.traps[s] - trapFunc() + trapFunc := func(s os.Signal) Trap { + signalManager.mtx.RLock() + defer signalManager.mtx.RUnlock() + + return signalManager.traps[s] + } + log.Infof("===Get signal trap func %s: %v", s.String(), trapFunc) + trapFunc(s) } }() } diff --git a/vendor/yunion.io/x/pkg/utils/profiler.go b/vendor/yunion.io/x/pkg/utils/profiler.go index 7394137b37b..53dc082d3d0 100644 --- a/vendor/yunion.io/x/pkg/utils/profiler.go +++ b/vendor/yunion.io/x/pkg/utils/profiler.go @@ -17,8 +17,10 @@ package utils import ( "io" "runtime/pprof" + "fmt" ) func DumpAllGoroutineStack(w io.Writer) { + fmt.Printf("=========DumpAllGoroutineStack") pprof.Lookup("goroutine").WriteTo(w, 1) }