zoukankan      html  css  js  c++  java
  • nginx 高并发优化参数

    关于内核参数的优化:
    net.ipv4.tcp_max_tw_buckets = 6000
    timewait的数量,默认是180000。
    net.ipv4.ip_local_port_range = 1024 65000
    允许系统打开的端口范围。
    net.ipv4.tcp_tw_recycle = 1
    启用timewait快速回收。
    net.ipv4.tcp_tw_reuse = 1
    开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。
    net.ipv4.tcp_syncookies = 1
    开启SYN Cookies,当出现SYN 等待队列溢出时,启用cookies来处理。
    net.core.somaxconn = 262144
    web 应用中 listen 函数的 backlog 默认会给我们内核参数的 net.core.somaxconn 限制到
    128,而nginx定义的NGX_LISTEN_BACKLOG 默认为511,所以有必要调整这个值。
    net.core.netdev_max_backlog = 262144
    每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包
    的最大数目。
    net.ipv4.tcp_max_orphans = 262144
    系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数
    字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击,
    不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。
    net.ipv4.tcp_max_syn_backlog = 262144
    记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而
    言,缺省值是1024,小内存的系统则是128。
    net.ipv4.tcp_timestamps = 0
    时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间
    戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。
    net.ipv4.tcp_synack_retries = 1
    为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也
    就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送 SYN+ACK 包的
    数量。
    net.ipv4.tcp_syn_retries = 1
    在内核放弃建立连接之前发送SYN 包的数量。
    net.ipv4.tcp_fin_timeout = 1
    如果套接字由本端要求关闭,这个参数决定了它保持在 FIN-WAIT-2 状态的时间。对端
    可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180 秒,
    2 你可以按这个设置,但要记住的是,即使你的机器是一个轻载的 WEB 服务器,也有因为大
    量的死套接字而内存溢出的风险,FIN- WAIT-2 的危险性比FIN-WAIT-1 要小,因为它最多只
    能吃掉1.5K内存,但是它们的生存期长些。 
    net.ipv4.tcp_keepalive_time = 30
    当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2 小时。
     
     
     
    net.ipv4.ip_forward = 0
    net.ipv4.conf.default.rp_filter =1
    net.ipv4.conf.default.accept_source_route = 0
    kernel.sysrq = 0
    kernel.core_uses_pid = 1
    net.ipv4.tcp_syncookies = 1
    kernel.msgmnb = 65536
    kernel.msgmax = 65536
    kernel.shmmax = 68719476736
    kernel.shmall = 4294967296
    net.ipv4.tcp_max_tw_buckets = 6000           #timewait的数量
    net.ipv4.tcp_sack = 1                                 #有选择的应答
    net.ipv4.tcp_window_scaling = 1                 #设置tcp/ip会话滑动窗口是否可变,1可变,0不可变。开启使滑动窗口大小增加数个数量级,提高数据传输能力
    net.ipv4.tcp_rmem = 4096        87380    4194304  #tcp接收缓冲区
    net.ipv4.tcp_wmem = 4096        16384    4194304  #tcp发送缓冲区
    net.core.wmem_default = 8388608                        #发送套接字缓冲区大小的缺省值(字节单位)
    net.core.rmem_default = 8388608                         #接收套接字缓冲区大小的缺省值
    net.core.rmem_max = 16777216                           #接收套接字缓冲区大小的最大值
    net.core.wmem_max = 16777216                          #发送套接字缓冲区大小的最大值
    net.core.netdev_max_backlog = 262144           #允许送到队列的数据包最大数目
    net.core.somaxconn = 262144                        #web应用中listen函数的backlog(积压)
    net.ipv4.tcp_max_orphans = 3276800              #最多有多少个TCP套接字不被关联到任何一个用户的句柄上
    net.ipv4.tcp_max_syn_backlog = 262144          #记录那些尚未收到客户端确认信息的连接请求最大值,表示SYN队列的长度,可以容纳更多等待连接的网络连接数
    net.ipv4.tcp_timestamps = 0                  #时间戳关闭
    net.ipv4.tcp_synack_retries = 1               #这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
    net.ipv4.tcp_syn_retries = 1                    #内核放弃连接之前发送SYN包的数量
    net.ipv4.tcp_tw_recycle = 1                     #timewait快速回收
    net.ipv4.tcp_tw_reuse = 1                       #timewait 用于新的连接
    net.ipv4.tcp_mem =    1835008 2752512 3670016     #out of socket memory
    net.ipv4.tcp_fin_timeout = 15                     #保持在FIN-WAIT-2状态的时间,对端出错永不关闭甚至当机缺省值是60s
    net.ipv4.tcp_keepalive_time = 30                                #keepalived 发送消息的频度
    net.ipv4.ip_local_port_range = 1024    65000              #端口范围
     
    #以下可能需要加载ip_conntrack模块 modprobe ip_conntrack ,有文档说防火墙开启情况下此模块失效

    #缩短established的超時時間

    net.netfilter.nf_conntrack_tcp_timeout_established = 180

    #CONNTRACK_MAX 允许的最大跟踪连接条目,是在内核内存中netfilter可以同时处理的“任务”(连接跟踪条目)

    net.netfilter.nf_conntrack_max = 1048576

    net.nf_conntrack_max = 1048576

     
    执行生效:/sbin/sysctl -p
     
    一般来说nginx配置文件中对优化比较有作用的为以下几项:
    worker_processes 8;
    3 nginx进程数,建议按照cpu数目来指定,一般为它的倍数。
    worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000
    01000000 10000000;
    为每个进程分配 cpu,上例中将 8 个进程分配到 8 个 cpu,当然可以写多个,或者将一
    个进程分配到多个cpu。
    worker_rlimit_nofile 102400;
    这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文
    件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit
    -n的值保持一致。
    use epoll;
    使用epoll的I/O模型,这个不用说了吧。
    worker_connections 102400;
    每个进程允许的最多连接数,理论上每台 nginx 服务器的最大连接数为
    worker_processes*worker_connections。
    keepalive_timeout 60;
    keepalive超时时间。
    client_header_buffer_size 4k;
    客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求
    头的大小不会超过 1k,不过由于一般系统分页都要大于 1k,所以这里设置为分页大小。分
    页大小可以用命令getconf PAGESIZE取得。
    open_file_cache max=102400 inactive=20s;
    这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件
    数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
    open_file_cache_valid 30s;
    这个是指多长时间检查一次缓存的有效信息。
    open_file_cache_min_uses 1;
    open_file_cache指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文
    件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,
    它将被移除。
  • 相关阅读:
    图像检索(image retrieval)- 11
    图像检索(image retrieval)- 10相关
    Mock.js简易教程,脱离后端独立开发,实现增删改查功能
    Azure Monitor (3) 对虚拟机磁盘设置自定义监控
    Azure Monitor (1) 概述
    Azure SQL Managed Instance (2) 备份SQL MI
    Azure Virtual Network (17) Private Link演示
    Azure Virtual Network (16) Private Link
    Azure Virtual Network (15) Service Endpoint演示
    Azure Virtual Network (14) Service Endpoint服务终结点
  • 原文地址:https://www.cnblogs.com/zy09/p/10361461.html
Copyright © 2011-2022 走看看