• EMQ配置


    参考官方配置页面:http://emqtt.com/docs/v2/tune.html

    Linux 操作系统参数
    系统所有进程可打开的文件数量
    官方配置:

    sysctl -w fs.file-max=2097152
    sysctl -w fs.nr_open=2097152
    echo 2097152 > /proc/sys/fs/nr_open

    服务器当前配置:

    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/fs/file-max 
    798344
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/fs/nr_open 
    1048576
    

      

    修改服务器配置:

    echo 1048576 > /proc/sys/fs/file-max
    echo 1048576 > /proc/sys/fs/nr_open
    

      

    [root@iZuf6ixy03u72vzno4jsiuZ ~]# echo 1048576 > /proc/sys/fs/file-max
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/fs/file-max 
    1048576
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# echo 1048576 > /proc/sys/fs/nr_open
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/fs/nr_open
    1048576
    

      

    系统允许当前进程打开的文件数量:

    官方配置:

    ulimit -n 1048576
    

      

    本地服务器配置:

    [root@iZuf6ixy03u72vzno4jsiuZ ~]# ulimit -a
    core file size (blocks, -c) 0
    data seg size (kbytes, -d) unlimited
    scheduling priority (-e) 0
    file size (blocks, -f) unlimited
    pending signals (-i) 31402
    max locked memory (kbytes, -l) 64
    max memory size (kbytes, -m) unlimited
    open files (-n) 278528
    pipe size (512 bytes, -p) 8
    POSIX message queues (bytes, -q) 819200
    real-time priority (-r) 0
    stack size (kbytes, -s) 10240
    cpu time (seconds, -t) unlimited
    max user processes (-u) 65535
    virtual memory (kbytes, -v) unlimited
    file locks (-x) unlimied

    修改配置文件:

    ulimit -n  524288
    

      

    修改后配置:

    [root@iZuf6ixy03u72vzno4jsiuZ ~]# ulimit -n  524288
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# ulimit -a
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 31402
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 524288
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 10240
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 65535
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited
    

     

    /etc/sysctl.conf

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

      

    官方配置:

    fs.file-max = 1048576
    #表示文件句柄的最大数量
    

    修改配置:

    vm.swappiness = 0
    net.ipv4.neigh.default.gc_stale_time=120
    net.ipv4.conf.all.rp_filter=0
    net.ipv4.conf.default.rp_filter=0
    net.ipv4.conf.default.arp_announce = 2
    net.ipv4.conf.all.arp_announce=2
    net.ipv4.tcp_max_tw_buckets = 5000
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_max_syn_backlog = 1024
    net.ipv4.tcp_synack_retries = 2
    net.ipv4.conf.lo.arp_announce=2
    # fs.file-max=65535
    fs.file-max=524288
    

      

    设置服务最大文件句柄数
    /etc/systemd/system.conf 设置服务最大文件句柄数:
    DefaultLimitNOFILE=1048576

    持久化设置允许用户/进程打开文件句柄数
    /etc/security/limits.conf 持久化设置允许用户/进程打开文件句柄数:
    limits.conf文件限制着用户可以使用的最大文件数,最大线程,最大内存等资源使用量。

    官方配置:

    * soft nofile 1048576
    * hard nofile 1048576
    

      

    服务器配置:

    # End of file
    * soft nofile 65535
    * hard nofile 65535
    * soft nproc 65535
    * hard nproc 65535
    * soft nofile 65535
    * hard nofile 65535
    * - nofile 278528
    

    服务器修改后配置:

    # End of file
    * soft nofile 65535
    * hard nofile 65535
    * soft nproc 65535
    * hard nproc 65535
    * soft nofile 524288
    * hard nofile 524288
    * - nofile 278528
    

    TCP 协议栈网络参数

    并发连接 backlog 设置:

    官方配置:

    sysctl -w net.core.somaxconn=32768
    #定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。
    sysctl -w net.ipv4.tcp_max_syn_backlog=16384
    #对于还未获得对方确认的连接请求,可保存在队列中的最大数目。如果服务器经常出现过载,可以尝试增加这个数字。
    sysctl -w net.core.netdev_max_backlog=16384
    #在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
    

    服务端配置:

    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/somaxconn
    128
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/netdev_max_backlog
    1000
    

    修改配置:

    [root@iZuf6ixy03u72vzno4jsiuZ ~]# echo 8192 >/proc/sys/net/core/somaxconn
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/somaxconn
    8192
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/ipv4/tcp_max_syn_backlog
    4096
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# echo 4096 > /proc/sys/net/core/netdev_max_backlog
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/netdev_max_backlog
    4096
    

      

    可用知名端口范围:
    官方配置:

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

     

    服务端配置

    cat /proc/sys/net/ipv4/ip_local_port_range
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/ipv4/ip_local_port_range
    32768 61000

    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.core.optmem_max=16777216
    #该文件表示每个套接字所允许的最大缓冲区的大小
    

    服务端配置:

    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/rmem_default
    124928
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/wmem_default
    124928
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/rmem_max
    124928
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/wmem_max
    124928
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/core/optmem_max
    20480
    

    修改服务端配置:

    echo 4194304 > /proc/sys/net/core/rmem_max
    echo 4194304 > /proc/sys/net/core/wmem_max
    echo 4194304 > /proc/sys/net/core/optmem_max
    cat /proc/sys/net/ipv4/tcp_mem
    #sysctl -w net.ipv4.tcp_mem='16777216 16777216 16777216'
    

    内核分配给TCP连接的内存
    第一个数字表示,当 tcp 使用的 page 少于 196608 时,kernel 不对其进行任何的干预
    第二个数字表示,当 tcp 使用了超过 262144 的 pages 时,kernel 会进入 “memory pressure” 压力模式
    第三个数字表示,当 tcp 使用的 pages 超过 393216 时(相当于1.6GB内存),就会报:Out of socket memory

    sysctl -w net.ipv4.tcp_rmem='1024 4096 16777216'
    sysctl -w net.ipv4.tcp_wmem='1024 4096 16777216'
    #为每个TCP连接分配的读、写缓冲区内存大小,单位是Byte
    第一个数字表示,为TCP连接分配的最小内存
    第二个数字表示,为TCP连接分配的缺省内存
    第三个数字表示,为TCP连接分配的最大内存
    
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/ipv4/tcp_mem
    753600  1004800 1507200
    #无修改
    

      

    TCP 连接追踪设置:

    官方配置:

    sysctl -w net.nf_conntrack_max=1000000
    sysctl -w net.netfilter.nf_conntrack_max=1000000
    #CONNTRACK_MAX 允许的最大跟踪连接条目,是在内核内存中netfilter可以同时处理的“任务”(连接跟踪条目)
    sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30


    服务端配置:

    cat /proc/sys/net/nf_conntrack_max
    cat /proc/sys/net/netfilter/nf_conntrack_max
    cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_time_wait
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/nf_conntrack_max
    65536
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/netfilter/nf_conntrack_max
    65536
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_time_wait
    120
    

      

    修改服务端配置:

    echo 250000 > /proc/sys/net/nf_conntrack_max
    echo 250000 > /proc/sys/net/netfilter/nf_conntrack_max
    

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

    官方配置:

    net.ipv4.tcp_max_tw_buckets=1048576
    #表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。


    当前服务器配置:

    cat /proc/sys/net/ipv4/tcp_max_tw_buckets
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/ipv4/tcp_max_tw_buckets
    5000
    

    修改服务器配置:

    echo 262114 > /proc/sys/net/ipv4/tcp_max_tw_buckets
    

    注意: 不建议开启該设置,NAT模式下可能引起连接RST

    # net.ipv4.tcp_tw_recycle = 1
    # net.ipv4.tcp_tw_reuse = 1
    

      

    FIN-WAIT-2 Socket 超时设置:

    net.ipv4.tcp_fin_timeout = 15 
    cat /proc/sys/net/ipv4/tcp_fin_timeout
    

      

    [root@iZuf6ixy03u72vzno4jsiuZ ~]# echo 15 > /proc/sys/net/ipv4/tcp_fin_timeout
    [root@iZuf6ixy03u72vzno4jsiuZ ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout
    15
    

      

    提高Linux应对短连接的负载能力
    在存在大量短连接的情况下,Linux的TCP栈一般都会生成大量的 TIME_WAIT 状态的socket。你可以用下面的命令看到:
    netstat -ant| grep -i time_wait
    有时候,这个数目是惊人的:
    netstat -ant|grep -i time_wait |wc -l
    可能会超过三四万。这个时候,我们需要修改 linux kernel 的 tcp time wait的时间,缩短之,有个 sysctl 参数貌似可以使用,它是 /proc/sys/net/ipv4/tcp_fin_timeout,缺省值是 60,也就是60秒。

     



     

  • 相关阅读:
    深入.net(文件操作)
    深入.net(多态二)
    Django之form组件
    cookie
    Django进阶
    Django基础
    JQuery
    Dom
    JavaScript
    CSS
  • 原文地址:https://www.cnblogs.com/saryli/p/9794815.html
Copyright © 2020-2023  润新知