Nginx - worker_processes、worker_connections设置
in Nginx with 0 comment

Nginx - worker_processes、worker_connections设置

in Nginx with 0 comment

Nginx-worker_processes、worker_connections设置

说明

工作进程和进程连接数是nginx两个比较重要的参数,设置好合适大小,可以提高nginx处理性能,看到了,记录一下。

转载自:https://blog.csdn.net/zhuyu19911016520/article/details/90714429
转载自:https://www.cnblogs.com/aaron-agu/p/8003831.html


引文

原作者的话:
As a general rule you need the only worker with large number of worker_connections, say 10,000 or 20,000.
However, if nginx does CPU-intensive work as SSL or gzipping and you have 2 or more CPU, then you may
set worker_processes to be equal to CPU number.
Besides, if you serve many static files and the total size of the files is bigger than memory, then you may
increase worker_processes to utilize a full disk bandwidth.
Igor Sysoev

翻译:
一般一个进程足够了,你可以把连接数设得很大。(worker_processes: 1,worker_connections: 10,000)
如果有SSL、gzip这些比较消耗CPU的工作,而且是多核CPU的话,可以设为和CPU的数量一样。(worker_processes: CPU核心数)
或者要处理很多很多的小文件,而且文件总大小比内存大很多的时候,也可以把进程数增加,以充分利用IO带宽(主要似乎是IO操作有block)

worker_processes

worker_processes,工作进程数
1.默认:worker_processes: 1
2.调大:worker_processes: CPU核心数,(双核4线程,可以设置为4)

worker_processes默认情况下为1,一般情况下不用修改,但考虑到实际情况,可以修改这个数值,以提高性能;
据官方说法,一般开一个就够了,多开几个,可以减少机器io带来的影响。
这个数字是不能乱设置的,如果网站没有出现io性能问题,最好不要修改,采用默认的1即可,
如果非要设置,必须要和CPU的内核数匹配,否则要么就假死(主要是Windows),要么就出现502的错误(主要是Linux)。

worker_connections

worker_connections,单个工作进程可以允许同时建立外部连接的数量,数字越大,能同时处理的连接越多

1.默认:worker_connections: 1024
2.调大:worker_connections: 66635

worker_connections解析
1.connections不是随便设置的,而是与两个指标有重要关联,一是内存,二是操作系统级别的“进程最大可打开文件数”。

2.内存:每个连接数分别对应一个read_event、一个write_event事件,一个连接数大概占用232字节,2个事件总占用96字节,那么一个连接总共占用328字节,通过数学公式可以算出100000个连接数大概会占用 31M = 100000 * 328 / 1024 / 1024,当然这只是nginx启动时,connections连接数所占用的nginx。

3.进程最大可打开文件数:进程最大可打开文件数受限于操作系统,可通过 ulimit -n 命令查询,以前是1024,现在是65535,nginx提供了worker_rlimit_nofile指令,这是除了ulimit的一种设置可用的描述符的方式。 该指令与使用ulimit对用户的设置是同样的效果。
此指令的值将覆盖ulimit的值,如:worker_rlimit_nofile 20960;
设置ulimits:ulimit -SHn 65535

示例

博主的服务器只有1颗cpu

worker_processes 1; 
worker_rlimit_nofile 65535;
#pid logs/nginx.pid; 
events { 
   worker_connections 65535; 
}

通过 ps -elf | grep nginx 找到 nginx 的worker进程ID
通过 cat /proc/17487/limits 查看,其中17487是worker进程ID,请注意其中的Max open files

root@iZm5eiw4hobozjn054cjzrZ:~# cat /proc/17487/limits 
Max stack size            8388608              unlimited            bytes     
Max processes             3869                 3869                 processes 
Max open files            65535                65535                files     
Max locked memory         65536                65536                bytes     

结尾

在最好的年纪不要辜负年华。

Responses