转自:Nginx:worker_processes、worker_connections设置_worker_connections设置多少_it_zhenxiaobai的博客-CSDN博客
worker_processes与worker_connections 设置好合适大小,可以提升 nginx 处理性能,非常重要。
原作者的话:
一般一个进程足够了,你可以把连接数设得很大。(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 CPU核心数(双核4线程,可以设置为4)
worker_connections,单个工作进程可以允许同时建立外部连接的数量数字越大,能同时处理的连接越多
默认:worker_connections 1024
调大:worker_connections 100000(调大到10万连接)
worker_connections解析
connections不是随便设置的,而是与两个指标有重要关联,一是内存,二是操作系统级别的“进程最大可打开文件数”
内存:每个连接数分别对应一个read_event、一个write_event事件,一个连接数大概占用232字节,2个事件总占用96字节,那么一个连接总共占用328字节,通过数学公式可以算出100000个连接数大概会占用 31M=100000*328/1024/1024,当然这只是nginx启动时,connections连接数所占用的nginx
进程最大可打开文件数:进程最大可打开文件数受限于操作系统,可通过 ulimit -n 命令查询,以前是1024,现在是65535,nginx提供了worker_rlimit_nofile指令,这是除了ulimit的一种设置可用的描述符的方式。该指令与使用ulimit对用户的设置是同样的效果。此指令的值将覆盖ulimit的值,如:worker_rlimit_nofile 20960;
设置ulimits:ulimit -SHn 65535
worker_processes 2;
worker_rlimit_nofile 65535;
#pid logs/nginx.pid;
events {
worker_connections 65535;
}
通过ps -elf | grep nginx 找到nginx的worker进程ID
通过cat /proc/11553/limits 查看,其中11553是worker进程ID,请注意其中的Max open files
nginx占用内存小、处理性能高,通过提高服务器的配置,Nginx可以应对更大的连接数