erlang websocket server 并发测试

项目地址:gatling(https://github.com/wudixiaotie/gatling)

1.首先去除系统限制:http://wudixiaotie.iteye.com/blog/2213342

2.3个erlang shell作为client 一个erlang shell 作为服务端。3个client shell每个启动30000个websocket client。每个client shell 每200毫秒创建一个websocket client,一个websocket client发送握手请求后发送一条123的数据。

3.然后发现每次服务端链接到28232个websocket client后,新的客户端就一直报{error,eaddrinuse}这个链接错误,原来是机器的端口不够用了,每个tcp链接怎么区别其他的tcp链接呢,有4个数据来标示(目的地IP,目的地Port,来源IP,来源Port)==(src_ip,src_port,dst_ip,dst_port),由于本机又做server又做client所以client发送的链接请求中(src_ip,dst_ip,dst_port)是固定的,那么只有src_port是可变的,所以每个websocket client的链接都要占用一个端口。而我的端口数是(32768~61000)之间(由cat /proc/sys/net/ipv4/ip_local_port_range命令查看),所以大概是28232个。由于一个IP地址的端口通过16bit进行编号,最多可以有65536个端口,所以这里最多能扩展范围也就是1024~65535左右。

su
echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
cat /proc/sys/net/ipv4/ip_local_port_range

 4.继续测试:

server在链接到30000左右的时候内存占用是940M左右,cpu6%左右,

链接到50000左右的时候内存占用1.4G,cpu5%左右,

链接到65000左右的时候内存占用1.7G,cpu5%左右,

测试完毕! Have fun :)

你可能感兴趣的:(websocket)