diff --git a/remoting/zookeeper/client.go b/remoting/zookeeper/client.go
index 0c70caa7fa9f8c6283616d66ffd459349833df39..f67a2549caf93cc9011e3b884014946227b580b8 100644
--- a/remoting/zookeeper/client.go
+++ b/remoting/zookeeper/client.go
@@ -44,6 +44,7 @@ const (
 var (
 	errNilZkClientConn = perrors.New("zookeeperclient{conn} is nil")
 	errNilChildren     = perrors.Errorf("has none children")
+	errNilNode         = perrors.Errorf("has none children")
 )
 
 // ZookeeperClient ...
@@ -499,19 +500,24 @@ func (z *ZookeeperClient) GetChildrenW(path string) ([]string, <-chan zk.Event,
 
 	err = errNilZkClientConn
 	z.Lock()
-	if z.Conn != nil {
-		children, stat, event, err = z.Conn.ChildrenW(path)
-	}
+	conn := z.Conn
 	z.Unlock()
+	if conn != nil {
+		children, stat, event, err = conn.ChildrenW(path)
+	}
+
 	if err != nil {
-		if err == zk.ErrNoNode {
+		if err == zk.ErrNoChildrenForEphemerals {
 			return nil, nil, perrors.Errorf("path{%s} has none children", path)
 		}
+		if err == zk.ErrNoNode {
+			return nil, nil, errNilNode
+		}
 		logger.Errorf("zk.ChildrenW(path{%s}) = error(%v)", path, err)
 		return nil, nil, perrors.WithMessagef(err, "zk.ChildrenW(path:%s)", path)
 	}
 	if stat == nil {
-		return nil, nil, perrors.Errorf("path{%s} has none children", path)
+		return nil, nil, perrors.Errorf("path{%s} get stat is nil", path)
 	}
 	if len(children) == 0 {
 		return nil, nil, errNilChildren
diff --git a/remoting/zookeeper/listener.go b/remoting/zookeeper/listener.go
index 6850aa3ffac28fbf52c2924649ef8ed1b149f88b..b32737a4657a0bafad3ea0385a1f4513cf787e68 100644
--- a/remoting/zookeeper/listener.go
+++ b/remoting/zookeeper/listener.go
@@ -201,6 +201,11 @@ func (l *ZkEventListener) listenDirEvent(zkPath string, listener remoting.DataLi
 				}
 			}
 			l.client.RegisterEvent(zkPath, &event)
+			if err == errNilNode {
+				logger.Warnf("listenDirEvent(path{%s}) got errNilNode,so exit listen", zkPath)
+				l.client.UnregisterEvent(zkPath, &event)
+				return
+			}
 			select {
 			case <-getty.GetTimeWheel().After(timeSecondDuration(failTimes * ConnDelay)):
 				l.client.UnregisterEvent(zkPath, &event)