记录最后调研EMQ并发测试方法及问题总结。
一、单台服务器最高只能跑2W多一点
问题描述
一直使用benchmark测试单台EMQ都没有超过3W链接数
解决方法
本身对TCP的机制了解不够深信,目前已知一个独立的外网IP只能提供最多6W的端口号,但每个TCP需要分配一个指定的端口号。所以理论上讲一台EMQ的服务器最多能跑6W链接数。
关于一直报”shutdown,eaddrnotavail”是因为测试的客户机端口号分配不足,并不是服务端无法分配端口号。
单台EMQ测试
1)、使用客户机数据5台
2)、最大链接数在76565
3)、异常情况是应用程序挂掉
erlang.log.4日志
===== ALIVE Sun Aug 26 14:56:54 CST 2018
[os_mon] cpu supervisor port (cpu_sup): Erlang has closed
[os_mon] memory supervisor port (memsup): Erlang has closed
二、Nginx代理只能跑几千个tcp链接
注:其中nginx和EMQ在同一台服务器上
问题描述
使用Nginx反向代理两台EMQ服务器每次都只能跑几千个链接数就提示错误。
解决方法
主要原因是过期时间设置太段,导致之前发起的请求在后面就过期了。
将Nginx(proxy_timeout)或Haproxy(timeout client)参数设置加大。
#Nginx
#proxy_timeout 24h;
#Haproxy
#timeout client 24h
Nginx反向代理测试
1)、使用客户机器数4台
2)、120最大链接数35183、47最大链接数是35191
3)、两台EMQ程序未出现异常情况,正常。
./emqtt_bench_sub -h qq.web.com -p 18830 -c 50000 -i 10 -t bench/%i -q 2
三、报错总结
conneted: 138
client 49863 EXIT: {shutdown,eaddrnotavail}
#分配不了端口
[error] [Client <0.7267.0>] CONNACK Timeout!
client 7590 EXIT: {shutdown,connack_timeout}
#链接超时
conneted: 191
client 49810 EXIT: {shutdown,econnrefused}
#链接被拒绝
四、使用阿里云的负载均衡 SLB测试
SLB根据支持不同的链数据有不同的收费标准,如果是单独两台EM做负载,理论上跑10W以上的链接数是成立的。
五、查看端口号使用命令
#查看端口号使用命令
netstat -npta | grep <端口号>
#查看端口号使用数量
netstat -npta |grep <端口号> | wc -l