• worker_processes:开启worker进程的数目,通常可设置为CPU核心的倍数。在不清楚的情况下,可设置成一倍于CPU核心数或auto(Nginx将自动发现CPU核心数)。
  • worker_connections:单个worker可处理并发连接的上限,但实际并发连接数能否达到这个值还与系统其他资源限制有关。当前Nginx实例可处理的并发连接数为 worker_processes *  worker_connections
  • worker_rlimit_nofile:worker可打开文件数上限(每个套接字打开一个文件描述符),worker_rlimit_nofile类似于系统配置ulimit -n(不过ulimit -n设置的最大值不能超过65536,且只能在当前shell环境中生效,重启后无效)。
  • limit_conn_zone:定义连接域,通常要与limit_conn配合使用。
    limit_conn_zone $binary_remote_addr zone=addr:10m;#shared memory size: 10m
  • limit_conn:为指定域中的每个key配置并发连接数,当实际连接请求数超出该值则拒绝。
    limit_conn_zone $binary_remote_addr zone=addr:10m;#shared memory size 10m
    
    server {
    ...
    limit_conn addr 1;#allow only one connection per an IP address at a time.
    }

    但要记住的是,

    In HTTP/2 and SPDY, each concurrent request is considered a separate connection.
  • limit_conn_status:当连接请求被拒绝后返回的状态码,默认503。
  • limit_req_zone:它是基于漏桶(Leaky Bucket)算法实现的,

    http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/m;
    ...
    server {
    ...
    location /search/ {
    limit_req zone=one burst=5 nodelay;
    }
  • limit_req:来不及处理的请求被延迟执行,直到它们的数量超过burst(漏桶的最大容量,默认为0),即溢出(Nginx将拒绝该请求);在上例中,nodelay表示在记时一分钟内,即使请求未溢出,只要是超出了10个后也直接拒绝。

  • limit_req_status:当请求被拒绝后返回的状态码,默认503。
  • limit_rate:这是ngx_http_core_module提供的功能,用于限制Nginx的下载速率。如果是对代理限速,也可以使用X-Accel-Limit-Rate响应头。
    location /download {
    limit_rate_after 10m;
    limit_rate 128k;
    }
  • limit_rate_after:通常与limit_rate一起使用。在上例中,10m以前不限速,10m以后才限制下载速率。
  • accept_mutex:默认为off,V1.11.3前默认为on, There is no need to enable accept_mutex on systems that support the EPOLLEXCLUSIVE flag (1.11.3) or when using reuseport. 当一个新连接到来时,所有可用的worker将从等待状态被唤醒,最终却只有一个worker能接受并处理连接,这就是所谓的惊群现象;如果这种现象每秒重复多次,将导致服务器性能下降,因为所有被唤醒的worker都在占用CPU时间,而增加了非生产性CPU周期和未使用的上下文切换。但Linux系统底层已经解决了这个问题,Nginx 自1.11.3开始支持EPOLLEXCLUSIVE flag,因此accept_mutex默认变为off。
    events {
    accept_mutex on;#worker processes will accept new connections by turn.
    }
  • accept_mutex_delay:当启用accept_mutex时,只有一个具有互斥锁的worker接受连接,其他worker则轮流等待accept_mutex_delay指定的时间。
  • multi_accept:默认为off。值为on使得worker能够在获得新连接通知时接受所有连接并放到监听队列中,值为off使得worker将逐个接受新连接。
  • thread_pool:采用asynchronous file I/O (AIO),多线程读写不锁worker。Nginx 1.7.11以上的版本可使用,加 --with-threads 配置参数编译。

    上图展示了Nginx的事件队列是在循环中顺序执行的,可能存在又长又重的操作(阻塞操作)导致事件处理循环卡住,其他事件必须等待这个操作执行完毕,因此而引入线程池;但在cache情景下,线程池并不会带来性能提升,反而应避免使用。

    Syntax:	thread_pool name threads=number [max_queue=number];
    Default: thread_pool default threads=32 max_queue=65536;
    Context: main
    This directive appeared in version 1.7.11.
    http {
    thread_pool one threads=128 max_queue=0;
    thread_pool two threads=32; server {
    location /one {
    aio threads=one;
    } location /two {
    aio threads=two;
    }
    }

    }
  • aio(asynchronous file I/O):开启或关闭异步文件I/O功能,它也允许aio使用线程池。Nginx官方给aio使用线程池的测试案例得9倍性能提升,可参考 NGINX引入线程池 性能提升9倍
    Syntax:	aio on | off | threads[=pool];
    Default: aio off;
    Context: http, server, location
  • keepalive: 在每一个worker进程的cache中创建一个到upstream的空闲keepalive连接池。如果keepalive池中的连接用完,Nginx依然可以向upstream发出更多的新连接,连接池只是起到缓存空闲keepalive连接的作用。It should be particularly noted that the keepalive directive does not limit the total number of connections to upstream servers that an nginx worker process can open. The connections parameter should be set to a number small enough to let upstream servers process new incoming connections as well.

    upstream fastcgi_backend {
    server 127.0.0.1:9000; keepalive 8;#连接池最大容量8。When this number is exceeded, the least recently used connections are closed.
    } server {
    ... location /fastcgi/ {
    fastcgi_pass fastcgi_backend;
    fastcgi_keep_conn on;
    ...
    }
    }

如果正常流量并不高,某些参数设置无需过高;否则,一旦遭遇DDOS攻击,将有可能导致服务器瘫痪。

Nginx中并发性能相关配置参数说明的更多相关文章

  1. 修改Linux内核参数提高Nginx服务器并发性能

    当linux下Nginx达到并发数很高,TCP TIME_WAIT套接字数量经常达到两.三万,这样服务器很容易被拖死.事实上,我们可以简单的通过修改Linux内核参数,可以减少Nginx服务器 的TI ...

  2. IIS 高并发的相关配置

    前言: 随着业务量的增加,服务器流量的增长增长了好多,高峰期会出现 503 的错误,IIS 对请求数的配置默认是 1000,无法满足现状的需求: 需要收集性能数据如下: 1.Windows性能监视器, ...

  3. Nginx的安装及相关配置

    Nginx的安装及相关配置 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. 一. gcc 安装 安装 n ...

  4. Java实战之02Hibernate-07与效率性能相关配置

    十四.其他HIbernate配置(与效率,性能相关) 1.数据库连接池 Hibernate有默认的连接池,性能有问题,不适合实际应用,适合学习阶段.DriverManagerConnectionPro ...

  5. 利用Nginx中的Upstream模块配置服务器负载均衡

    1. 前言 nginx有一个最大的功能就是可以实现服务器的负载均衡,本篇博文就利用nginx中的upstream模块来配置一个简单的负载均衡.关于nginx的安装和配置文件可以查阅博文:windows ...

  6. xampp 中 mysql的相关配置

    最近开始接触PHP,而一般搭建PHP环境使用的都是xampp 这个集成环境,由于之前我的系统中已经安装了mysql服务,所以在启动mysql的时候出现一些列错误,我通过查询各种资料解决了这个问题,现在 ...

  7. nginx负载均衡的相关配置

    一台nginx的负载均衡服务器(172.25.254.131) 两台安装httpd作为web端 一.准备工作 1.1 安装nginx yum -y install gcc openssl-devel ...

  8. Nginx日志格式以及相关配置

    一.Nginx日志格式以及参数说明log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' ...

  9. 压力测试报出503错误---ASP.NET支持大并发的相关配置

    项目反馈报出503错误,需要收集性能数据如下: 1.Windows性能监视器,该应用程序池进程的线程和处理队列 2.问题重现时的进程dump 这是请求到达IIS后遇到的第一个队列,HTTP.sys收到 ...

随机推荐

  1. 人工智能二:TensorFlow环境搭建

    一.Windows下安装虚拟机VMware Workstation,在虚拟机中安装Ubuntu(要善用搜索引擎,解决各类简单问题) VMware Workstation下载地址:http://www. ...

  2. js二级事件模型的处理细节

    一.纠正网络上的一个误传--“IE不支持事件捕获” 可以在浏览器中运行上面demo,在各主流浏览器中,鼠标移上都可以分别触发捕获与冒泡事件的监听函数,所以IE也是支持事件捕获的,连IE6都支持,只是在 ...

  3. sed命令针对文件操作具体解释

    Linux的简单shell脚本中改动文件操作 1.Sed简单介绍 sed 是一种在线编辑器,它一次处理一行内容.处理时.把当前处理的行存储在暂时缓冲区中,称为"模式空间"(patt ...

  4. VBScripts and UAC elevation(visa以后的系统)

    这两天由于工作须要.在写一些vbs的脚本,才知道.vbs不能像其它可运行文件一样.在 须要提升訪问权限时.弹出UAC窗体.那么,怎样通过UAC提升vbs脚本的訪问权限呢? 查了一些资料,将结果整理一下 ...

  5. Java 模拟栈结构

    栈和队列: 通常是作为程序猿的工具,用于辅助构思算法.生命周期较短,执行时才被创建 訪问受限.在特定时刻,仅仅有一个数据可被读取或删除 是一种抽象的结构.内部的实现机制.对用户不可见.比方用数组.链表 ...

  6. 为PHP摇旗呐喊!

    如今市场上的电子商务软件基本上可归结为两大阵营.即PHP阵营和Java阵营.但对接触电子商务不久的用户来说.看到的往往仅仅是它们的表相,仅仅是明显的价格差异.却非常难看出它们之间的实际差异.事实上,P ...

  7. UI - Cocoa Touch框架

    Cocoa Touch 层 Cocoa Touch层包括创建 iOS应用程序所需的关键框架. 上至实现应用程序可视界面,下至与高级系统服务交互.都须要该层技术提供底层基础.在开发应用程序的时候.请尽可 ...

  8. ThoughtWorks 2017技术雷达

    前言: ThoughtWorks人酷爱技术.我们对技术进行构建.研究. 测试.开源.记述,并始终致力于对其进行改进-以求造福 大众.我们的使命是支持卓越软件并掀起IT革命.我们创建 并分享Though ...

  9. nat的翻译类型(2)--动态nat

    目的:在1.1 1.2 1.3 三台内网的服务器访问外网的服务器(202.1.1.2)时,将内网ip转换为外网ip. 1.设置内网三台服务器的Ip ,网关,以及外网服务器的ip网关 分别为:192.1 ...

  10. 游戏AI(二)—行为树优化之

    上一篇我们讲到了AI架构之一的行为树,本篇文章和下一篇文章我们将对行为树进行优化,在本篇文章中我们讲到的是内存优化 问题 上一篇中我们设计的行为树由于直接采用new进行动态内存分配,没有自己进行管理. ...