测试环境
* 服务器:4核32G内存,ubuntu 16.04
* 客户端(16台):2核4G内存,ubuntu 16.04
服务器优化参数
最大文件打开数增大
默认
cat /proc/sys/fs/file-max
3283596
ulimit -n
65535
修改
sudo vi /etc/security/limits.conf
root soft nofile 3283596
root hard nofile 3283596
* soft nofile 3283596
* hard nofile 3283596
端口范围增大
默认
sysctl -a|grep ip_local_port_range
net.ipv4.ip_local_port_range = 32768 60999
修改
sysctl -w net.ipv4.ip_local_port_range = 1024 65535
设置TCP 在关闭的时候不缓存指标在 route cache
sysctl -w net.ipv4.tcp_no_metrics_save=1
服务器待测服务情况
* pm2 4实例管理的node websocket服务
* node开启16个端口的websocket监听(3200-3015)
测试过程
* 客户端模拟64000个websocket连接
* 16台测试客户端依次启动(当前一台达到64000后启动下一台)
测试结果
服务端连接数情况
稳定状态下的负载情况
初始化pm2 node服务情况
结束后稳定状态下pm2 node服务情况
报错情况
{ Error: connect ETIMEDOUT 10.0.1.154:3208
at Object._errnoException (util.js:1024:11)
at _exceptionWithHostPort (util.js:1046:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1182:14)
code: 'ETIMEDOUT',
errno: 'ETIMEDOUT',
syscall: 'connect',
address: '10.0.1.154',
port: 3208,
type: 'error',
target:
WebSocket {
domain: null,
_events:
{ message: [Object],
open: [Object],
close: [Object],
error: [Object] },
_eventsCount: 4,
_maxListeners: undefined,
_socket: null,
_ultron: null,
_closeReceived: false,
bytesReceived: 0,
readyState: 0,
supports: { binary: true },
extensions: {},
_binaryType: 'nodebuffer',
_isServer: false,
url: 'ws://10.0.1.154:3208/scene/push/6565',
protocolVersion: 13 } }