• 企业级nginx内核优化篇


    1. cpu核心配置

       方法1: worker_processes auto;  自动调用[推荐]
       方法2: worker_processes 4;  手工配置
    
    	检查CPU核心:yum install numactl 
    	命令: numactl --hardware
        [root@leilei ~]# numactl --hardware
         available: 1 nodes (0)
         node 0 cpus: 0 1
         node 0 size: 4095 MB
         node 0 free: 194 MB
         node distances:
         node   0 
           0:  10 
    

    2. cpu绑定减少进程切换:

       #如  双核CPU配置:  worker_cpu_affinity 01  10;
            四核cpu配置:  worker_cpu_affinity 0001 0010 0100 1000;
            八核cpu配置:  worker_cpu_affinity 0001 0010 0100 1000 1001 1010 1100 1101;   
    		   自动切换:  worker_cpu_affinity auto;
    

    3. 进程优先级:

       方法1: worker_priority 0; 默认配置
       方法2: worker_priority -20;  优先级最高   
    

    4. 并发连接:

    	worker_connections  100000;
    	nginx默认为1024,当访问量过大时1024就不够用了
    	需要修改worker_rlimit_nofile文件打开数,这个不能被worker_connections超出,否则会出现wern,所以基本配置:
    	worker_rlimit_nofile 65535;  #不应该超过ulimit -a中的数值.
    	worker_connections  100000;  #单个work进程的最大并发数
    	
    	worker_rlimit_nofile 65535;
    	worker_connections  100000;
    

    5. 事件处理模型:

    events {
        use epoll;
        worker_rlimit_nofile 65535;    
    	worker_connections  100000;  #上下游连接加起来 都是使用这个句柄数.
        multi_accept on;   #允许尽可能接受多的连接  默认值off 建议改为 on
        accept_mutex on;   # 防止被唤醒,从而加重服务器压力,默认值 off 建议改为on
        accept_mutex_delay 10ms;  # 设置获得互斥锁的最少延迟时间。 默认值 500ms
        }
    

    6. 开启同时接受多连接

        events {
            multi_accept on;
    		}
    

    7. 避免频繁唤醒

        events {
            accept_mutex on;
    		}
    

    8. sendfile 高效传输:

    	配置区块: http server location
    	sendfile   on;
    

    9. 内核优化:

       cat /etc/sysctl.cnf
       net.core.netdev_max_backlog = 1000 #默认值1000  在高并发情况下该值可以改为 102400
       net.core.somaxconn = 128           #默认值1000  在高并发情况下可以设置更高 102400
       net.ipv4.tcp_max_orphans = 32768   #默认值32768 这是TCP连接套戒指缓存,用于防止DDOS攻击,在内存较大时可以修改的大一些 如: 102400
       net.ipv4.tcp_max_syn_backlog = 256 #默认值256   这是用于记录未被确认的连接,一般需要加大 如: 102400
       net.ipv4.tcp_timestamps = 1        #默认值1     这是用于数据包时间戳的支持设置,避免网络异常,默认值 1  建议修改为 0 禁用此设置
       net.ipv4.tcp_synack_retries = 5    #默认值5     这是设置内核放弃TCP连接之前向客户端发送SYN+ACK包的数量,用于三次握手,如果值设置过多会影响性能 建议改为 2 
       net.ipv4.tcp_syn_retries = 5       #默认值5     与上面功能类似,建议修改为 2 
    

    10. 多核负载均衡:

      listen  80 reuseport;
       listen 443 ssl http2 default_server reuseport;
       连接请求的速度是很高的,但是请求不需要大量的处理,reuseport 也能大幅提高性能,此优化项需要继续centos7以上或Linux内核3.9以上的版本才可以使用. 因为它是基于内核层面负载均衡
       引用reuseport参数后,对引用的socket,accept_mutex参数将会无效
    

    11. TCP连接握手优化[内核调优]:

            net.ipv4.tcp_syn_retries = 6                   #主动建立连接,发送SYN报文的重试次数.
    	net.ipv4.ip_local_port_range = 32768 60999     #建立连接后本地端口的可用范围
    	net.ipv4.tcp_fastopen = 3                      #fast open 配置:  0 关闭   1 作为客户端使用  2 作为服务器使用  3 无论客户端和服务器都可以使用
    	net.ipv4.tcp_retries1 = 3                      #丢包重传上限,到达上限,更新缓存
    	net.ipv4.tcp_retries2 = 15                     #丢包重传上限,到达上限,更新缓存
    	net.ipv4.ip_local_port_range = 20000 65535     #可用端口范围
    	net.ipv4.tcp_sack = 1                          #错误状态快速恢复
    	#net.ipv4.tcp_fack = 1                         #拥塞避免和 快速重传功能 当tcp_sack设置为0的时候,这个值即使设置为1也无效
            net.ipv4.tcp_max_syn_backlog = 128             #syn_rcvd状态连接最大个数# 防止TCP半连接报文攻击
            net.ipv4.tcp_synack_retries =  1               #三次握手中的第二次握手,该配置决定Linux内核放弃连接之前发送syn+ack确认包的数量
    	net.ipv4.tcp_tw_recycle = 1                    #TCP连接中的time_wait sockets的快速回收
    	net.ipv4.tcp_tw_reuse = 1                      #开启连接复用,将time_wait sockets重新用于新的tcp连接.
    	net.ipv4.ip_local_port_range = 20000 65535     #对外处理连接的端口反围
    	fs.file-max = 204800                           #文件句柄数
    	
    	这些调优参数加入到 /etc/sysctl.conf 后 使用 sysctl -p 让他生效
    

    12. TCP连接建立优化

        net.core.netdev_max_backlog = 25000     #默认128 [防止syn攻击backlog] 这是接受来自网卡,但是未被内核协议栈处理的报文队列长度.
        net.ipv4.tcp_max_syn_backlog = 25000    #默认128 syn_rcvd状态连接最大个数# 防止TCP半连接报文攻击
    

    13. TCP设置时间戳,避免复用

        net.ipv4.tcp_timestamps = 0
    

    14. 主动建立连接应用层超时时间[反向代理相关]

    	proxy_connect_timeout  60s;
    

    15. 超出处理能力,对新来的SYN直接丢弃连接 [别配置]

    	net.ipv4.tcp_abort_on_overflow = 0
    

    16. SYN队列满后,新的SYN不进入列队 1代表启用 0 关闭

        net.ipv4.tcp_syncookies = 1
    
  • 相关阅读:
    Oracle 验证A表的2个字段组合不在B表2个字段组合里的数据
    jQuery方法一览
    Maven构建项目时index.jsp文件报错
    DDL——对数据库表的结构进行操作的练习
    不经意的小错误——onclick和click的区别
    UML基础——统一建模语言简介
    基于UML的面向对象分析与设计
    数据结构之——树与二叉树
    UML类图几种关系的总结
    C3P0连接参数解释
  • 原文地址:https://www.cnblogs.com/superlinux/p/12794169.html
Copyright © 2020-2023  润新知