• 05-Nginx性能调优


    目录

    Nginx 的并发处理机制

    全局模块下的调优

    worker_processes 2

    worker_cpu_affinity 01 10

    worker_rlimit_nofile 65535

    events 模块下的调优

    worker_connections 1024

    accept_mutex on

    accept_mutex_delay 500ms

    multi_accept on

    use epoll

    A、 select | poll | epoll

    B、 rtsig

    C、 kqueue

    D、/dev/poll

    http 模块下的调优

    非调优属性简介

    include mime.types;

    default_type     application/octet-stream;

    charset utf-8;

    sendfile on

    tcp_nopush on

    tcp_nodelay on

    keepalive_timeout 60

    keepalive_requests 10000

    client_body_timeout 10


    Nginx 的并发处理机制

    一般情况下并发处理机制有三种:多进程、多线程,与异步机制。Nginx 对于并发的处理同时采用了三种机制。当然,其异步机制使用的是异步非阻塞方式。

    我们知道Nginx 的进程分为两类:master 进程与 worker 进程。每个 master 进程可以生成多个 worker 进程,所以其是多进程的。每个 worker 进程可以同时处理多个用户请求,每个用户请求会由一个线程来处理,所以其是多线程的。

    那么,如何解释其“异步非阻塞”并发处理机制呢?

    worker 进程采用的就是 epoll 多路复用机制来对后端服务器进行处理的。当后端服务器返回结果后,后端服务器就会回调 epoll 多路复用器,由多路复用器对相应的 worker 进程进行通知。此时,worker 进程就会挂起当前正在处理的事务,拿 IO 返回结果去响应客户端请求。响应完毕后,会再继续执行挂起的事务。这个过程就是“异步非阻塞”的。

        1. 全局模块下的调优

    1. worker_processes 2

    打开 nginx.conf 配置文件,可以看到 worker_processes 的默认值为 1。

    worker_processes,工作进程,用于指定 Nginx 的工作进程数量。其数值一般设置为 CPU

    内核数量,或内核数量的整数倍

    不过需要注意,该值不仅仅取决于 CPU 内核数量,还与硬盘数量及负载均衡模式相关。在不确定时可以指定其值为 auto。

    1. worker_cpu_affinity 01 10


    将 worker 进程与具体的内核进行绑定。不过,若指定 worker_processes 的值为 auto, 则无法设置 worker_cpu_affinity。

    该设置是通过二进制进行的。每个内核使用一个二进制位表示,0 代表内核关闭,1 代表内核开启。也就是说,有几个内核,就需要使用几个二进制位。

    1. worker_rlimit_nofile 65535

    用于设置一个 worker 进程所能打开的最多文件数量。其默认值与当前 Linux 系统可以打开的最大文件描述符数量相同。

        1. events 模块下的调优

    1. worker_connections 1024

    设置每一个 worker 进程可以并发处理的最大连接数。该值不能超过 worker_rlimit_nofile

    的值。

    1. accept_mutex on

    1. on:默认值,表示当一个新连接到达时,那些没有处于工作状态的 worker 将以串行方式来处理;
    2. off:表示当一个新连接到达时,所有的 worker 都会被唤醒,不过只有一个worker 能获取新连接,其它的 worker 会重新进入阻塞状态,这就是“惊群”现象。

    1. accept_mutex_delay 500ms

    设置队首 worker 会尝试获取互斥锁的时间间隔。默认值为 500 毫秒。

    1. multi_accept on

    1. off系统会逐个拿出新连接按照负载均衡策略,将其分配给当前处理连接个数最少的worker。
    2. on系统会实时的统计出各个 worker 当前正在处理的连接个数,然后会按照“缺编” 最多的 worker 的“缺编”数量,一次性将这么多的新连接分配给该 worker。

    1. use epoll

    设置worker 与客户端连接的处理方式。Nginx 会自动选择适合当前系统的最高效的方式。当然,也可以使用 use 指令明确指定所要使用的连接处理方式。user 的取值有以下几种: select | poll | epoll | rtsig | kqueue | /dev/poll 。

    A、 select | poll | epoll

    这是三种多路复用机制。select 与 poll 工作原理几乎相同,而epoll 的效率最高,是现在使用最多的一种多路复用机制。

    B、 rtsig

    realtime signal,实时信号,Linux 2.2.19+的高效连接处理方式。但在 在Linux 2.6 版本后, 不再支持该方式。

    C、 kqueue

    应用在 BSD 系统上的epoll。

    D、/dev/poll

    UNIX 系统上使用的 poll。

        1. http 模块下的调优

    1. 非调优属性简介

    1. include mime.types;

    将当前目录(conf 目录)中的 mime.types 文件包含进来。

    1. default_type     application/octet-stream;

    对于无扩展名的文件,默认其为 application/octet-stream 类型,即 Nginx 会将其作为一个八进制流文件来处理。

    1. charset utf-8;

    设置请求与响应的字符编码。

    1. sendfile on

    设置为 on 则开启 Linux 系统的零拷贝机制,否则不启用零拷贝。当然,开启后是否起作用,要看所使用的系统版本。CentOS6 及其以上版本支持 sendfile 零拷贝。

    1. tcp_nopush on

    1. on:以单独的数据包形式发送 Nginx 的响应头信息,而真正的响应体数据会再以数据包的形式发送,这个数据包中就不再包含响应头信息了。
    2. off:默认值,响应头信息包含在每一个响应体数据包中。

    1. tcp_nodelay on

    1. on:不设置数据发送缓存,即不推迟发送,适合于传输小数据,无需缓存。
    2. off:开启发送缓存。若传输的数据是图片等大数据量文件,则建议设置为 off。

    1. keepalive_timeout 60

    设置客户端与Nginx 间所建立的长连接的生命超时时间,时间到达,则连接将自动关闭。单位秒。

    1. keepalive_requests 10000

    设置一个长连接最多可以发送的请求数。该值需要在真实环境下测试。

    1. client_body_timeout 10

    设置客户端获取 Nginx 响应的超时时限,即一个请求从客户端发出到接收到Nginx 的响应的最长时间间隔。若超时,则认为本次请求失败。

  • 相关阅读:
    Spring cloud gateway过滤器学习
    都讨论大厂面试,当我小厂面试请喝茶的?
    mongodb数据库操作
    [云原生案例2.4 ] Kubernetes的部署安装 【通过Kubeadm部署Kubernetes高可用集群】
    【前端之旅】响应式布局及Bootstrap框架
    Inner Join与Left Join
    向量数据库Weaviate Cloud 和 Milvus Cloud:性能大比拼
    【ORACLE】Oracle里有“time”数据类型吗?--关于对Oracle数据类型的一点研究
    【老生谈算法】matlab实现蚁群算法源码——蚁群算法
    安装适配依赖
  • 原文地址:https://blog.csdn.net/xianghanscce/article/details/127762473