压力测试时,客户端创建4万多连接后出错
在压力测试时,连接超过4万(TCP端口共6万多),压测程序会抛出connect: cannot assign requested address.
服务端的连接可支持上百万,并经过初步分析客户度出错时TCP端口是被全部占用.
请问如何解决压力测试时 压测程序TCP端口不足的问题?
package main
import (
"golang.org/x/net/websocket"
"log"
"time"
"fmt"
)
func connect() {
origin := "http://127.0.0.1/"
url := "ws://127.0.0.1:8080/ws"
_, err := websocket.Dial(url, "", origin)
if err != nil {
log.Fatal(err)
}
}
func main() {
for i := 0; i < 100000; i++ {
go connect()
fmt.Println(i)
}
time.Sleep(time.Second * 100)
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
内核是以一个(著名的)5元信息组来标识不同的socket的:源地址、源端口、目的地址、目的端口、协议号。
任何一个不同,都不叫“同一个socket”。客户端绑定多个IP地址 一个IP可开65535个端口,那么多个IP是多少呢?
感谢@xutongle提供VIP的思路,客户端绑定VIP确实解决了TCP端口不足的问题.
同时,还需要对系统诸多设置进行优化,可参考使用八种框架分别实现百万websocket常连接的服务器
创建虚拟IP
ifconfig eth0:0 192.168.1.101 netmask 255.255.255.0 up
connect函数接收虚拟IP参数: