diff --git a/config/service_config.go b/config/service_config.go
index 3f120aaff29c5b5f477c942ee4cb1a5d88d9176f..c99660461790dc9cd13cb7739ac89312a98e648f 100644
--- a/config/service_config.go
+++ b/config/service_config.go
@@ -20,7 +20,7 @@ package config
 import (
 	"context"
 	"fmt"
-	"math/rand"
+	"net"
 	"net/url"
 	"strconv"
 	"strings"
@@ -112,10 +112,30 @@ func getRandomPorts(size int) []int {
 	if size <= 0 {
 		return ports
 	}
-	startPort := int(rand.Int31n(6000) + 10000)
 
-	for i := 0; i < size; i++ {
-		ports = append(ports, startPort+i*3)
+	var (
+		flag bool
+		addr *net.TCPAddr
+	)
+	i := 0
+	for i < size {
+		flag = false
+		addr = nil
+		go func() {
+			listener, err := net.Listen("tcp", ":0")
+			if err != nil {
+				return
+			}
+
+			flag = true
+			addr = listener.Addr().(*net.TCPAddr)
+		}()
+		time.Sleep(50 * time.Millisecond)
+		if !flag {
+			continue
+		}
+		ports = append(ports, addr.Port)
+		i++
 	}
 	return ports
 }