系统调优

    100 万连接测试所需的 Linux 内核参数,网络协议栈参数,Erlang 虚拟机参数, EMQ X 消息服务器参数设置如下:

    系统全局允许分配的最大文件句柄数:

    允许当前会话 / 进程打开文件句柄数:

    持久化 ‘fs.file-max’ 设置到 /etc/sysctl.conf 文件:

    1. fs.file-max = 1048576
    1. DefaultLimitNOFILE=1048576

    /etc/security/limits.conf 持久化设置允许用户 / 进程打开文件句柄数:

    并发连接 backlog 设置:

    1. sysctl -w net.core.somaxconn=32768
    2. sysctl -w net.core.netdev_max_backlog=16384

    可用知名端口范围:

    1. sysctl -w net.ipv4.ip_local_port_range='1000 65535'

    TCP Socket 读写 Buffer 设置:

    1. sysctl -w net.core.rmem_default=262144
    2. sysctl -w net.core.wmem_default=262144
    3. sysctl -w net.core.rmem_max=16777216
    4. sysctl -w net.core.optmem_max=16777216
    5. #sysctl -w net.ipv4.tcp_mem='16777216 16777216 16777216'
    6. sysctl -w net.ipv4.tcp_rmem='1024 4096 16777216'
    7. sysctl -w net.ipv4.tcp_wmem='1024 4096 16777216'

    TIME-WAIT Socket 最大数量、回收与重用设置:

    1. sysctl -w net.ipv4.tcp_max_tw_buckets=1048576
    2. # 注意:不建议开启該设置,NAT 模式下可能引起连接 RST
    3. # sysctl -w net.ipv4.tcp_tw_recycle=1

    FIN-WAIT-2 Socket 超时设置:

    1. sysctl -w net.ipv4.tcp_fin_timeout=15

    优化设置 Erlang 虚拟机启动参数,配置文件 emqx/etc/emqx.conf:

    1. ## Erlang Process Limit
    2. node.process_limit = 2097152
    3. ## Sets the maximum number of simultaneously existing ports for this system
    4. node.max_ports = 1048576

    设置 TCP 监听器的 Acceptor 池大小,最大允许连接数。配置文件 emqx/etc/emqx.conf:

    1. sysctl -w net.ipv4.ip_local_port_range="500 65535"
    2. echo 1000000 > /proc/sys/fs/nr_open
    3. ulimit -n 100000

    并发连接测试工具: