worker_processes:
表示开启nginx的worker进程的个数,nginx启动会开两种进程,master进程用来管理调度,workwr进程用来处理请求;
上面两种设置方法如下:
方法一:worker_processes auto;
表示设置服务器cpu核数匹配开启nginx开启的worker进程数。
查看cpu核数命令:cat /proc/cpuinfo
方法二:nginx设置cpu亲和力
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
00000001表示启用第一个cpu内核,00000010表示启用第二个cpu内核,以此类推
这种设置方法更高效,因将每个cpu核提供给固定的worker进程服务,减少cpu上下文切换代理的资源浪费。
如果服务器cpu有限
比如:2核cpu,开启2个进程,设置如下:
worker_processes 2;
worker_cpu_affinity 01 10;
比如:4核cpu,开启4个进程,设置如下:
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000
8核cpu,worker_processes=8
1个worker进程能够最大打开的文件数(进程数)=65535(参考 worker_rlimit_nofile ----> linux ulimit - n)
最大的客户端连接数: max_clients = (多少个工作进程数) worker_processes * (1个工作线程的处理线程数) worker_connections 8 * 65535
nginx作为http服务器:
请求模型 client<------> nginx
max_clients = worker_processes * worker_connections / 2
nginx作为反向代理服务器的时候:
请求模型 client<-----> nginx <----> web server
max_clients = worker_processes * worker_connections / 4
为什么作为http服务器时除以2:
该公式基于http 1.1协议,一次请求大多数浏览器发送两次连接,并不是request和response响应占用两个线程,实际情况,请求时双向的,连接是没有方向的。
为什么作为反向代理服务器时除以4:
因nginx作为反向代理,客户端和nginx建立连接,nginx和后端服务器也要建立连接。
单位时间(keepalive_timeout)内nginx最大并发量c
c = worker_processes * worker_connextions / 2 = 8 * 65535 /2
每秒的并发量cs
cs = worker_processes * worker_connections / (2 * 65)