diff --git a/protocol/grpc/grpc_protocol_test.go b/protocol/grpc/grpc_protocol_test.go
index 41c895d24fe371d0226078cf1c164ab4b47759f3..4594f41e09700f890145bcf513c61d74fbb1599b 100644
--- a/protocol/grpc/grpc_protocol_test.go
+++ b/protocol/grpc/grpc_protocol_test.go
@@ -64,6 +64,7 @@ func TestGrpcProtocol_Export(t *testing.T) {
 
 func TestGrpcProtocol_Refer(t *testing.T) {
 	go internal.InitGrpcServer()
+	defer internal.ShutdownGrpcServer()
 	time.Sleep(time.Second)
 
 	proto := GetProtocol()
diff --git a/protocol/grpc/internal/server.go b/protocol/grpc/internal/server.go
index 5c08b13267313d4fba1825731d532521fd6f9274..cb406bc622b99dcb2cf363717f059e48e67bd2df 100644
--- a/protocol/grpc/internal/server.go
+++ b/protocol/grpc/internal/server.go
@@ -27,6 +27,10 @@ import (
 	"google.golang.org/grpc"
 )
 
+var (
+	s *grpc.Server
+)
+
 // server is used to implement helloworld.GreeterServer.
 type server struct {
 	UnimplementedGreeterServer
@@ -45,9 +49,16 @@ func InitGrpcServer() {
 	if err != nil {
 		log.Fatalf("failed to listen: %v", err)
 	}
-	s := grpc.NewServer()
+	s = grpc.NewServer()
 	RegisterGreeterServer(s, &server{})
 	if err := s.Serve(lis); err != nil {
 		log.Fatalf("failed to serve: %v", err)
 	}
 }
+
+func ShutdownGrpcServer() {
+	if s == nil {
+		return
+	}
+	s.GracefulStop()
+}