diff --git a/config/graceful_shutdown_signal_darwin.go b/config/graceful_shutdown_signal_darwin.go
index 8ad79ffa62ceed4096c60bfb9139b7ff1586808e..3129ab32b1a9c925a46efa1dfe7ef8103ba0069c 100644
--- a/config/graceful_shutdown_signal_darwin.go
+++ b/config/graceful_shutdown_signal_darwin.go
@@ -26,7 +26,7 @@ var (
 	// ShutdownSignals ...
 	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}
+		syscall.SIGABRT, syscall.SIGSYS, syscall.SIGTERM}
 
 	// DumpHeapShutdownSignals ...
 	DumpHeapShutdownSignals = []os.Signal{syscall.SIGQUIT, syscall.SIGILL,
diff --git a/registry/nacos/registry.go b/registry/nacos/registry.go
index a3fa06cbc2c18247aa12e9c7e41b4e25829a7091..0dfb64622ec35121b22413aeb46ab7190ee3ae65 100644
--- a/registry/nacos/registry.go
+++ b/registry/nacos/registry.go
@@ -117,7 +117,7 @@ func newNacosRegistry(url *common.URL) (registry.Registry, error) {
 	registry := nacosRegistry{
 		URL:          url,
 		namingClient: client,
-		registryUrls: make([]common.URL, 16, 16),
+		registryUrls: []common.URL{},
 	}
 	return &registry, nil
 }
@@ -267,9 +267,9 @@ func (nr *nacosRegistry) IsAvailable() bool {
 }
 
 func (nr *nacosRegistry) Destroy() {
-	logger.Info("Destroy nacos")
 	for _, url := range nr.registryUrls {
 		err := nr.DeRegister(url)
+		logger.Infof("DeRegister Nacos url:%+v", url)
 		if err != nil {
 			logger.Errorf("Deregister url:%+v  err:%v", url, err.Error())
 		}
diff --git a/registry/protocol/protocol.go b/registry/protocol/protocol.go
index a7678ba4e2f38cfeb77f202103e03066a7efdbef..458cde2e860138787b088060128283fd75f1b059 100644
--- a/registry/protocol/protocol.go
+++ b/registry/protocol/protocol.go
@@ -44,6 +44,7 @@ import (
 )
 
 var (
+	once        sync.Once
 	regProtocol *registryProtocol
 )
 
@@ -154,6 +155,7 @@ func (proto *registryProtocol) Export(invoker protocol.Invoker) protocol.Exporte
 	if regI, loaded := proto.registries.Load(registryUrl.Key()); !loaded {
 		reg = getRegistry(registryUrl)
 		proto.registries.Store(registryUrl.Key(), reg)
+		logger.Infof("Export proto:%p registries address:%p", proto, proto.registries)
 	} else {
 		reg = regI.(registry.Registry)
 	}
@@ -307,14 +309,12 @@ func (proto *registryProtocol) Destroy() {
 		ivk.Destroy()
 	}
 	proto.invokers = []protocol.Invoker{}
-
 	proto.bounds.Range(func(key, value interface{}) bool {
 		exporter := value.(protocol.Exporter)
 		exporter.Unexport()
 		proto.bounds.Delete(key)
 		return true
 	})
-
 	proto.registries.Range(func(key, value interface{}) bool {
 		reg := value.(registry.Registry)
 		if reg.IsAvailable() {
@@ -348,10 +348,10 @@ func setProviderUrl(regURL *common.URL, providerURL *common.URL) {
 
 // GetProtocol ...
 func GetProtocol() protocol.Protocol {
-	if regProtocol != nil {
-		return regProtocol
-	}
-	return newRegistryProtocol()
+	once.Do(func() {
+		regProtocol = newRegistryProtocol()
+	})
+	return regProtocol
 }
 
 type wrappedInvoker struct {