```go
port := 20000
LocalAddress := "192.168.1.148"
for port<30000 {
log.Println("Starting:",port)
localAddr,_ := net.ResolveTCPAddr("tcp",LocalAddress+":"+strconv.Itoa(port))
dialer := &net.Dialer{LocalAddr: localAddr}
log.Println("Starting dial ...")
//卡在这里
conn,err := tls.DialWithDialer(dialer,"tcp","rhel:8000",tlsConfig)
log.Println("End dial ...")
if err!=nil {
log.Panicln(err)
}
go handleConn(conn)
port++
}
```
发起大约五千个连接之后,就开始卡住,之后每次DialWithDialer都要花费7min
不知道什么原因
ulimit如果超出了也轮不到变慢了吧, 应该直接panic退出了.
端口复用是指服务器端绑定的监听端口吧,不是请求端的.请求端的端口是随机分配的?如果请求端也能端口复用后面的挤掉前面的.拿从头到尾只有一个端口被打开.这种确实不太可能会慢的.
我觉得变慢的原因就是因为打开的连接太多了, 都是长连接, IO处理能力有限所以爆掉了?
瞎猜的.
#3
更多评论
第一反应是 ulimit的问题
第二反应是请求端没有端口复用,快速建立和关闭tcp连接时,由于tcp是无法直接关闭的,往往实际是需要等超时才会被关闭。
#2