测试调优
100 万连接测试所需的 Linux 内核参数,网络协议栈参数,Erlang 虚拟机参数,EMQ X 参数设置如下:
系统全局允许分配的最大文件句柄数:
允许当前会话/进程打开文件句柄数:
持久化’fs.file-max’设置到/etc/sysctl.conf 文件:
fs.file-max = 1048576
* soft nofile 1048576
并发连接 backlog 设置:
可用知名端口范围:
sysctl -w net.ipv4.ip_local_port_range='1000 65535'
TCP Socket 读写 Buffer 设置:
sysctl -w net.core.rmem_default=262144
sysctl -w net.core.wmem_default=262144
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
#sysctl -w net.ipv4.tcp_mem='16777216 16777216 16777216'
sysctl -w net.ipv4.tcp_rmem='1024 4096 16777216'
sysctl -w net.ipv4.tcp_wmem='1024 4096 16777216'
TCP 连接追踪设置:
sysctl -w net.nf_conntrack_max=1000000
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
FIN-WAIT-2 Socket 超时设置:
net.ipv4.tcp_fin_timeout = 15
优化设置 Erlang 虚拟机启动参数,配置文件 etc/emqx.conf:
node.process_limit = 2097152
## Sets the maximum number of simultaneously existing ports for this system
node.max_ports = 1048576
设置 TCP 监听器的 Acceptor 池大小,最大允许连接数。配置文件 etc/emqx.conf:
## TCP Listener
listener.tcp.external= 1883
listener.tcp.external.acceptors = 64
listener.tcp.external.max_connections = 1000000
测试客户端服务器在一个接口上,最多只能创建 65000 连接: