1 .什么是nginx中的worker and master?
root@i-rgdfz3kg:~# ps -ef|grep nginx
root 903 1 0 Mar14 ? 00:00:00 nginx: master process /usr/sbin/nginx
root 3008 2972 0 14:23 pts/0 00:00:00 grep --color=auto nginx
www-data 6919 903 0 Mar17 ? 00:05:22 nginx: worker process
www-data 6920 903 0 Mar17 ? 00:05:36 nginx: worker process
nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。而基本的网络事件,则是放在worker进程中来处理了。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致,这里面的原因与nginx的进程模型以及事件处理模型是分不开的。
所以一般在配置nginx生产环境时,这样配置:
worker_processes auto;
worker_processes 定义了nginx对外提供web服务时的worder进程数。最优值取决于许多因素,包括(但不限于)CPU核的数量、存储数据的硬盘数量及负载模式。不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)。
2 .什么是 worker_rlimit_nofile?
更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。
worker_rlimit_nofile 65335;
这个值设置为worker_connections 的一半是最好的
3 .什么是worker_connections?
设置可由一个worker进程同时打开的最大连接数。每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。
worker_connections 102400;
4 .修改ulimit -n
ulimit -n 65335
vi /etc/pam.d/common_session
加上这句话
session required pam_limits.so
vi /etc/profile
加上
ulimit -SHn 65335
重新登陆机器,检查ulimit -n 是否为65335