优化Nginx服务的worker进程个数
修改nginx主配置文件
worker_processes 1; #指定了Nginx要开启的进程数,结尾数字就是进程个数
Nginx有Master进程和worker进程之分,Master为管理进程,真正接待“顾客”的是worker进程。
优化Nginx进程个数的策略
(1)worker_processes参数大小的设置最好和网站的用户数量相关联,
(2)新搭建服务器时,worker进程数最开始的设置可以等于CPU的核数,高流量高并发场合也可以考虑将进程数提高至CPU核数*2
查看Web服务器CPU硬件资源信息
通过/proc/cpuinfo可查看CPU个数及总核数。查看CPU总核数的示例如下:
grep processor /proc/cpuinfo processor : 0 processor : 1 processor : 2 processor : 3 grep processor /proc/cpuinfo | wc -l 4 #表示为1颗CPU四核
#查看CPU总颗数示例如下: grep "physical id" /proc/cpuinfo physical id : 0 #物理ID一致,同一颗CPU physical id : 0 #物理ID一致,同一颗CPU physical id : 0 #物理ID一致,同一颗CPU physical id : 0 #物理ID一致,同一颗CPU grep "physical id" /proc/cpuinfo | sort | uniq | wc -l 1 #去重复,表示1颗CPU
修改重启后的worker进程数量,如下:
ps -ef | grep "nginx" | grep -v grep root 1110 1 0 11:12 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx nginx 1429 1110 0 11:33 ? 00:00:00 nginx: worker process nginx 1430 1110 0 11:33 ? 00:00:00 nginx: worker process nginx 1431 1110 0 11:33 ? 00:00:00 nginx: worker process nginx 1432 1110 0 11:33 ? 00:00:00 nginx: worker process
从“worker_processes 4”可知,worker进程数为4个。Nginx Master主进程不包含在这个参数内,Nginx Master的主进程为管理进程,负责调度和管理worker进程。
Nginx事件处理模型优化
在Linux下,Nginx使用epoll的I/O多路复用模型,在Freebsd中使用kqueue的I/O多路复用模型,在Solaris中使用/dev/poll方式的I/O多路复用模型,在Windows中使用的是icop,等等。
也可以不指定事件处理模型,Nginx会自动选择最佳的事件处理模型服务。
#具体的配置参数如下: events #events指令是设定Nginx的工作模式及连接数上限 { use epoll; #use是一个事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select,poll,kqueue,epoll,rtsig和/dev/poll。
其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。
对于Linux系统Linux2.6+内核,推荐选择epoll工作模式,这是高性能高并发的设置 }
调整Nginx单个进程允许的客户端最大连接数
调整Nginx单个进程允许的客户端最大连接数,控制参数为work_connections。 (worker_connections的值要根据具体服务器性能和程序的内存使用量来指定)
events #events指令是设定Nginx的工作模式和连接数上线 { worker_connections 20480; #worker_connections也是个事件模块指令,用于定义Nginx每个进程的最大连接数,默认是1024.最大客户端连接数由worker_processes和worker_connections决定,
即Max_client= worker_processes*worker_connections。进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令
“ulimit -HSn 65535”或配置相应文件后,worker_connections的设置才能生效。 }
实际的并发连接数除了受worker_connections参数控制外,还和最大打开文件数worker_rlimit_nofile有关,Nginx总并发连接=worker数量*worker_connections。
配置Nginx worker进程最大打开文件数
worker_rlimit_nofile 65535; #最大打开文件数,可设置为系统优化后的ulimit -HSn的结果
放置位置:主标签段 此参数的作用是改变worker processes能打开的最大文件数