Nginx事件处理模型
demo
events {
use epoll;
worker_connections 65535;
multi_accept on;
}
worker_connections
下面有介紹multi_accept
告诉nginx收到一个新连·接通知后接受尽可能多的连接,默认是on
,设置为on后,多个worker按串行方式来处理连接,也就是一个连接只有一个worker被唤醒,其他的处于休眠状态,设置为off后,多个worker按并行方式来处理连接,也就是一个连接会唤醒所有的worker,直到连接分配完毕,没有取得连接的继续休眠。当你的服务器连接数不多时,开启这个参数会让负载有一定的降低,但是当服务器的吞吐量很大时,为了效率,可以关闭这个参数。
开启高效传输模式
http {
include mime.types;
default_type application/octet-stream;
……
sendfile on;
tcp_nopush on;
……
}
- Include mime.types : 媒体类型,include 只是一个在当前文件中包含另一个文件内容的指令。
- default_type application/octet-stream :默认媒体类型足够。
sendfile on
:开启高效文件传输模式
,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。- tcp_nopush on:必须在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量(将响应头和正文的开始部分一起发送,而不一个接一个的发送。)
worker_processes
worker_processes指令控制工作进程数:
worker_processes 1;
其默认值为1,这意味着NGINX只运行一个worker。 该值应根据可用内核数,磁盘,网络子系统,服务器负载等更改为最佳值。
一般设置为可用的(cpu)核心数。
或者,可以将其设置为auto
。 这样nginx会自动根据核心数为生成对应数量的worker进程。
查看cpu数
lscpu
cat /proc/cpuinfo | grep 'processor' | wc -l
worker_connections
默认值为512.该指令设置单个worker进程最大打开的连接数
worker_rlimit_nofile
同时连接的数量受限于系统上可用的文件描述符的数量,因为每个套接字将打开一个文件描述符。 如果NGINX尝试打开比可用文件描述符更多的套接字,会发现error.log中出现Too many opened files
的信息。
检查文件描述符(文件句柄数)
ulimit -a
文件资源限制的配置可以在/etc/security/limits.conf
设置,针对root/user
等各个用户或者*
代表所有用户来设置。
* soft nofile 65535
* hard nofile 65535
用户重新登录生效(ulimit -n
)
nginx的worker_rlimit_nofile
现在,将此值增加到大于worker_processes * worker_connections
的值。 应该是增加当前worker运行用户的最大文件打开数值
NGINX提供了worker_rlimit_nofile
指令,这是除了ulimit的一种设置可用的描述符的方式。 该指令与使用ulimit对用户的设置是同样的效果
。此指令的值将覆盖ulimit的值,如:
worker_rlimit_nofile 65535;
参考了大佬的博客
https://www.cnblogs.com/sherman125/p/8081095.html
https://www.jianshu.com/p/3217f651d8a4