diff --git a/common/url.go b/common/url.go
index c594df235134d71d98b83c11b2f6eb9312283aae..0ef285d0ee9833d27c674508a40d0d74970c5e0d 100644
--- a/common/url.go
+++ b/common/url.go
@@ -27,6 +27,7 @@ import (
 	"net/url"
 	"strconv"
 	"strings"
+	"sync"
 )
 
 import (
@@ -64,11 +65,13 @@ func (t RoleType) Role() string {
 }
 
 type baseUrl struct {
-	Protocol     string
-	Location     string // ip+port
-	Ip           string
-	Port         string
-	Params       url.Values
+	Protocol string
+	Location string // ip+port
+	Ip       string
+	Port     string
+	Params   url.Values
+	//url.Values is not safe map, add to avoid concurrent map read and map write error
+	paramsLock   sync.Mutex
 	PrimitiveURL string
 	ctx          context.Context
 }
@@ -283,14 +286,18 @@ func (c URL) Service() string {
 }
 
 func (c *URL) AddParam(key string, value string) {
+	c.paramsLock.Lock()
 	c.Params.Add(key, value)
+	c.paramsLock.Unlock()
 }
 
 func (c URL) GetParam(s string, d string) string {
 	var r string
+	c.paramsLock.Lock()
 	if r = c.Params.Get(s); r == "" {
 		r = d
 	}
+	c.paramsLock.Unlock()
 	return r
 }
 func (c URL) GetParamAndDecoded(key string) (string, error) {