websocket压力测试工具
2022-06-08
本来是打算用jmeter来做直播间的压力测试,这样的话需要进直播间就会产生很多费用,所以最后方案决定压测自己的websocket服务。
说明:
在服务器单核双线程 4G内存云主机,共16台即可完成百万长连接且(消息发送频率为:1s)
一、服务端优化
1.1 修改/etc/security/limits.conf
vi /etc/security/limits.conf
把65535 修改为1000000
root soft nofile 65535 root soft nofile 65535
root hard nofile 65535 root hard nofile 65535
* soft nofile 65535 * soft nofile 1000000
* hard nofile 65535 * hard nofile 1000000
1.2 修改/etc/sysctl.conf
vi /etc/sysctl.conf 内容如下
vi /etc/sysctl.conf
# 获取端口范围
net.ipv4.ip_local_port_range = 500 65000
# 系统最大文件打开数
fs.file-max = 20000000
# 单个用户进程最大文件打开数
fs.nr_open = 20000000
# 全连接队列长度,默认128
net.core.somaxconn = 10240
# 半连接队列长度,当使用sysncookies无效,默认128
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_syncookies = 0
# 网卡数据包队列长度
net.core.netdev_max_backlog = 41960
# time-wait 最大队列长度
net.ipv4.tcp_max_tw_buckets = 300000
# time-wait 是否重新用于新链接以及快速回收
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
# tcp报文探测时间间隔, 单位s
net.ipv4.tcp_keepalive_intvl = 30
# tcp连接多少秒后没有数据报文时启动探测报文
net.ipv4.tcp_keepalive_time = 900
# 探测次数
net.ipv4.tcp_keepalive_probes = 3
# 保持fin-wait-2 状态多少秒
net.ipv4.tcp_fin_timeout = 15
# 最大孤儿socket数量,一个孤儿socket占用64KB,当socket主动close掉,处于fin-wait1, last-ack
net.ipv4.tcp_max_orphans = 131072
# 每个套接字所允许得最大缓存区大小
net.core.optmem_max = 819200
# 默认tcp数据接受窗口大小
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# tcp栈内存使用第一个值内存下限, 第二个值缓存区应用压力上限, 第三个值内存上限, 单位为page,通常为4kb
net.ipv4.tcp_mem = 786432 4194304 8388608
# 读, 第一个值为socket缓存区分配最小字节, 第二个,第三个分别被rmem_default, rmem_max覆盖
net.ipv4.tcp_rmem = 4096 4096 4206592
# 写, 第一个值为socket缓存区分配最小字节, 第二个,第三个分别被wmem_default, wmem_max覆盖
net.ipv4.tcp_wmem = 4096 4096 4206592
# 将连接改为200w+以满足单机100w长连接.
net.nf_conntrack_max=2048576
保存之后执行命令:
sysctl -p /etc/sysctl.conf
二、客户端(16台都要执行)
echo ‘net.ipv4.ip_local_port_range = 500 65000’ >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
三、安装node环境
wget https://nodejs.org/dist/v12.18.0/node-v12.18.0-linux-x64.tar.xz
xz -d node-v12.18.0-linux-x64.tar.xz
tar -xf node-v12.18.0-linux-x64.tar
ln -snf /home/workspace/node-v12.18.0-linux-x64/bin/node /usr/bin/node
ln -snf /home/workspace/node-v12.18.0-linux-x64/bin/npm /usr/bin/npm
ln -snf /home/workspace/node-v12.18.0-linux-x64/bin/npx /usr/bin/npx
cd /home/test/workspace/websocket-benchmarker
npm install --save
进入目录加压目录
node ./bin/websocket-benchmarker.js -c 62500 -r 1000000 -h ws://127.0.0.1:8080/ws_robot #启动客户端
四、websocket压测工具启动说明
参数 | 说明 | 示例 |
---|---|---|
-h | websocker服务端路径 | -h ws://127.0.0.1:8080/ws_robot |
-c | 启动客户端数量 | -c 60000,启动6万个客户端,默认:1 |
-r | 发送数据次数 | -r 100,发送100次数据,默认:5次 |
-s | 数据大小 | -s 10,发送10字节数据,默认:128字节 |
-i | 数据发送频率 | -i 1000,数据每1000毫秒发送一次,默认:1000 |