参考nginx官网:http://nginx.org/en/docs/ngx_core_module.html#worker_connections

从用户的角度,http 1.1协议下,由于浏览器默认使用两个并发连接,因此计算方法:

nginx作为http服务器的时候:

max_clients = worker_processes * worker_connections/2

nginx作为反向代理服务器的时候:

max_clients = worker_processes * worker_connections/4  (

官方wiki(页面标记已经过时,但是网上很多文章都在引用)看到一个关于为什么除以4的解释:

如果作为反向代理,因为浏览器默认会开启2个连接到server,而且Nginx还会使用fds(file descriptor)从同一个连接池建立连接到upstream后端。则最大连接数的计算公式如下:

或者从一般建立连接的角度:客户并发连接为1.

nginx作为http服务器的时候:

max_clients = worker_processes * worker_connections

nginx作为反向代理服务器的时候:

max_clients = worker_processes * worker_connections/2

nginx做反向代理时,和客户端之间保持一个连接,和后端服务器保持一个连接。

但是怎样合理的设置worker_processes与worker_connections这两个参数?

worker_processes :

worker角色的进程个数(nginx启动后有多少个worker处理http请求。master不处理请求,而是根据相应配置文件信息管理worker进程.   master进程主要负责对外揽活(即接收客户端的请求),并将活儿合理的分配给多个worker,每个worker进程主要负责干活(处理请求))。

最理想的worker_processes值取决于很多因素,包含但不限于CPU的核数,存储数据的硬盘驱动器个数(跟这个有什么关系?难道和cpu一样,存在跨区域读取数据问题),以及负载模式(?这个是什么?)当其中任何一个因素不确定的时候,将其设置为cpu核数或许是一个比较好的初始值,“自动”也基本是如此确认一个参数值的。

“自动”这个参数值是从nginx 1.3.8和nginx 1.2.5 开始进行支持的,自动参数可以自动检测 cpu cores 并设置 worker_processes 参数 。

在网上也看到以下建议:

nginx doesn't benefit from more than one worker per CPU.

一个cpu配置多于一个worker数,对nginx而言没有任何益处。

If Nginx is doing CPU-intensive work such as SSL or gzipping and you have 2 or more CPUs/cores, then you may set worker_processes to be equal to the number of CPUs or cores.

如果nginx处理的是cpu密集型(比较耗费cpu的)的操作,建议将此值设置为cpu个数或cpu的核数。

cpu相关信息查看:

    逻辑CPU个数:
          # cat /proc/cpuinfo | grep "processor" | wc -l

   物理CPU个数:
           # cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l

     每个物理CPU中Core的个数:
         # cat /proc/cpuinfo | grep "cpu cores" | wc -l

worker_connections:

官方解释如下,个人认为是每一个worker进程能并发处理(发起)的最大连接数(包含所有连接数)。

不能超过最大文件打开数:在linux终端中输入ulimit -a进行查看

worker_rlimit_nofile

  • 英文原文:
Syntax: worker_rlimit_nofile number;
Default: —
Context: main
Changes the limit on the maximum number of open files (RLIMIT_NOFILE) for worker processes. Used to increase the limit without restarting the main process.
  • 中文翻译:

为nginx工作进程改变打开最多文件描述符数目的限制。用来在不重启主进程的情况下增加限制。

例如:

worker_rlimit_nofile 204800;

理论上这个值是最多打开文件数(ulimit -n)与nginx工作进程相关

参考:

http://www.jb51.net/LINUXjishu/164573.html  最大文件打开数相关描述

https://blog.csdn.net/sole_cc/article/details/52433353

nginx最大并发连接数的思考:worker_processes、worker_connections、worker_rlimit_nofile的更多相关文章

  1. 【转载】nginx 并发数问题思考:worker_connections,worker_processes与 max clients

    注:这个文章主要是作者一直在研究nginx作为http server和反向代理服务器时候所谓最大的max_clients和 worker_connections的计算公式, 其实最后的结论也没有卡上公 ...

  2. nginx 并发数问题思考:worker_connections,worker_processes与 max clients

    我相信,很多人都跟我一样,看书都不会太细致也不太认真思考,感觉书中讲的东西都应该是对的,最近读书时我发现以前认为理所当然的东西事实上压根都没有弄明白,最终的结果是,书是别人的,书中的知识也是别人的. ...

  3. nginx优化:worker_processes/worker_connections/worker_rlimit_nofile

    一,优化nginx的worker进程数 1,worker_processes应设置为多少? worker_processes 4; 如何设置这个值: worker_processes默认值是1,一般要 ...

  4. 如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式: 最大连接数 = worker_processes * worker_connections/4

    如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式: 最大连接数 = worker_pro ...

  5. 基于nginx的频率控制方案思考和实践

    基于nginx的频率控制方案思考 标签: 频率控制 nginx 背景 nginx其实有自带的limit_req和limit_conn模块,不过它们需要在配置文件中进行配置才能发挥作用,每次有频控策略的 ...

  6. Nginx控制并发连接数

    ngx_http_limit_conn_module这个模块用于限制每个定义的key值的连接数,特别是单IP的连接数. 不是所有的连接数都会被计数.一个符合计数要求的连接是整个请求头已经被读取的连接. ...

  7. nginx的 CPU參数worker_processes和worker_cpu_affinity使用说明

    Nginx默认没有开启利用多核CPU,我们能够通过添加worker_cpu_affinity配置參数来充分利用多核CPU.CPU是任务处理,计算最关键的资源,CPU核越多.性能就越好. worker_ ...

  8. Linux下查看Nginx的并发连接数和连接状态-乾颐堂

    Linux下查看Nginx等的并发连接数和连接状态. 1.查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态: netstat -n | awk '/^tcp/ {++S[$N ...

  9. 查看 nginx 的并发连接数

    通过查看Nginx的并发连接,我们可以更清除的知道网站的负载情况.Nginx并发查看有两种方法(之所以这么说,是因为笔者只知道两种),一种是通过web界面,一种是通过命令,web查看要比命令查看显示的 ...

随机推荐

  1. Servlet的监听器Listener

    Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是 随web应用的启动而启动,只初始化一次,随web ...

  2. Elasticsearch( 插件开发)

    elasticsearch5.2.2 插件开发(一) Scripting plugins:这个插件本质来说,就是会调用用户的脚本,所以可以执行任何的程序,举例的话,可以通过这个插件,支持javascr ...

  3. MapReduce程序的几种提交运行模式

    本地模型运行 1/在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行      ----输入输出数据可以放在本地路径下(c:/wc/ ...

  4. Search Insert Position——二分法

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  5. python写的的简单的爬虫小程序

    import re import urllib def getHtml(url): page=urllib.urlopen(url) html=page.read() return html def ...

  6. Entity Framework中使用DbCompiledModel中遇到的坑和解决方案

    前段时间,在公司做项目时,引入Entity Framework Code First的方法. 我们公司的软件为SaaS结构,有N个企业注册,其中SQL Server中有一张表为t_User_企业注册号 ...

  7. centos7系统安装后的基础优化

    1.更改网卡信息 1.编辑网卡 # cd /etc/sysconfig/network-scripts/ # mv ifcfg-ens33 ifcfg-eth0 # mv ifcfg-ens37 if ...

  8. NET/ASP.NET MVC Controller 控制器(一:深入解析控制器运行原理)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC Controller 控制器的入口(Controller的执行流程) 3.ASP.NETMVC Controller 控制器的入口(Controll ...

  9. python笔记二:常用数据类型操作

    1.切片:常用于取list或tuple的部分元素的操作 1)l=[1,2,3,4,5,6] l[:3]表示取前3个值,l[1:5]表示1到5个值, L[-3:]从列表最后往前数即最后3个数.... 2 ...

  10. HDU 5862 Counting Intersections(离散化 + 树状数组)

    Counting Intersections Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...