nginx的事件处理worker

it2025-10-26  7

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

最新回复(0)