nginx高并发优化之事件驱动模块设置

author author     2022-12-06     643

关键词:

一、概述

events 
use epoll;
worker_connections 65535;

二、说明

1、use epoll;
设置事件驱动模型使用epoll。事件驱动模型有select、poll、poll等。
select先创建事件的描述符集合,对于一个描述符,可以关注其上面的Read事件、Write事件以及Exception事件,所以要创建三类事件描述符
集合,分别用来处理Read事件的描述符、Write事件的描述符、Exception事件的描述符,然后调用底层的select()函数,等待事件发生,
轮询所有事件描述符集合的每一个事件描述符,检查是否有事件发生,有的话就处理。select效率低,主要是轮询效率低,而且还要分别轮
询三个事件描述符的集合。
poll方法与select类似,都是先创建一个关注事件的描述符集合,再去等待这些事件发生,然后再轮询描述符集合,检查有无事件发生,如
果有,就去处理。不同点是poll为Read事件、Write事件以及Exception事件只创建一个集合,在每个描述符对应的结构上分别设置Read
事件、Write事件以及Exception事件。最后轮询的时候,可以同时检察权这三个事件是否发生。可以说,poll库是select库的优化实现。
epoll是Nginx支持的高性能事件驱动库之一。是公认的非常优秀的事件驱动模型。和poll库跟select库有很大的不同,最大区别在于效率。
我们知道poll库跟select库都是创建一个待处理的事件列表,然后把这个列表发给内核,返回的时候,再去轮询检查这个列表,以判断事
件是否发生。这样在描述符多的应用中,效率就显得比较低下了。一种比较好的方式是把列表的管理交由内核负责,一旦某种事件发生,
内核就把发生事件的描述符列表通知给进程,这样就避免了轮询整个描述符列表。首先,epoll库通过相关调用同志内核创建一个有N个描
述符的事件列表,然后给这些描述符设置所关注的事件,并把它添加到内核的事件列表中去。完成设置以后,epoll库就开始等待内核通知
事件发生了,某一事件发生后,内核讲发生事件的描述符列表上报给epoll库,得到事件列表的epoll库,就可以进行事件处理了。epoll库
在linux平台是高效的,它支持一个进程打开大数目的事件描述符,上限是系统可以打开文件的最大数目;同时,epoll库的IO效率不随描
述符数量的增加而线性下降,因为它只会对内核上报的活跃的描述符进行操作。

2、worker_connections 65535;
#单个进程允许的客户端最大连接数
设置一个进程理论允许的最大连接数,理论上越大越好,但不可以超过worker_rlimit_nofile的值。还有个问题,linux系统中有个指令
open file resource limit,它设置了进程可以打开的文件句柄数量,可以用下面的指令查看你的linux系统中open file resource
limit指令的值,cat /proc/sys/fs/file-max可以将该指令设置为23900251
echo "2390251" > /proc/sys/fs/file-max;
sysctl -p
#nginx的最大连接数[worker_connections]×[worker_processes]

3、accept_mutex
默认off
#设置Nginx网络连接序列化
这个牵扯到《UNIX网络编程》第一卷中提到的“惊群”问题(Thundering herd problem),大致意思是当某一时刻只有一个网络连接到来时,
多个睡眠进程会被同时叫醒,但只有一个进程可获得连接,如果每次唤醒的进程数目太多,会影响一部分系统性能。在Nginx服务器的多进程
下,就可能出现这个问题,为了解决这个问题,Nginx配置了包含这样一条指令accept_mutex,当其设置为开启的时候,将会对多个Nginx进
程接受连接进行序列化,防止多个进程对连接的争抢。当服务器连接数不多时,开启这个参数会让负载有一定程度的降低。但是当服务器的
吞吐量很大时,为了效率,请关闭这个参数;并且关闭这个参数的时候也可以让请求在多个worker间的分配更均衡。所以我们设置
accept_mutex off;

4、multi_accept
默认off
如果multi_accept禁用,一个worker进程将一次接受一个新连接。否则,worker进程将一次接受所有新连接。
multi_accept指令使得NGINX worker能够在获得新连接的通知时尽可能多的接受连接。 此指令的作用是立即接受所有连接放到监听队列中
。 如果指令被禁用,worker进程将逐个接受连接。
让nginx worker进程尽可能多地接受请求。它的作用是让worker进程一次性地接受监听队列里的所有请求,然后处理。
如果multi_accept的值设为off,多个worker按并行方式来处理连接,也就是一个连接会唤醒所有的worker,直到连接分配完毕,没有取得
连接的继续休眠。
否则的话,多个worker按串行方式来处理连接,也就是一个连接只有一个worker被唤醒,其他的处于休眠状态,这个工作进程将同时接受所
有的新连接。
默认Nginx没有开启multi_accept(也有说法默认开启,可能存在版本差异)。如果web服务器面对的是一个持续的请求流,那么启用
multi_accept可能会造成worker进程一次接受的请求大于worker_connections指定可以接受的请求数。这就是overflow,这个overflow
会造成性能损失,overflow这部分的请求不会受到处理。

nginx高并发优化之upstream模块设置

一、配置httpupstreamhttp_backendhash$remote_addrconsistent;server192.168.10.131:3306max_fails=2fail_timeout=10sweight=1;server192.168.10.132:3306max_fails=2fail_timeout=10sweight=1;keepalive32;keepalive_t 查看详情

nginx高并发优化之gzip模块配置

一、概述httpgzipon;gzip_disable"msie6";gzip_min_length1024;gzip_varyon;gzip_comp_level2;gzip_buffers324k;gunzip_staticon;gzip_typestext/plaintext/cssapplication/jsonapplication/x-javascripttext/xmlapplica 查看详情

nginx高并发优化之buffer模块配置

一、配置httptypes_hash_max_size2048;client_header_buffer_size4k;client_max_body_size8m;client_body_buffer_size10K;large_client_header_buffers48k;二、说明在接受请求时,nginx提供可以将请求数据写入请求缓存区的功能。这些缓存区的数据可以作为Nginx的变量使... 查看详情

nginx高并发优化之文件描述符设置

一、nginx设置/etc/security/limits.conf*softnofile65535*hardnofile65535*softnproc65535*hardnproc65535*softcoreunlimited*softstack65535通过sysctl-p使得配置生效,可用通过ulimit-a查看file配置是否生效修改的文件数量上限必须小于等于系统级文件数即系统内核... 查看详情

nginx高并发优化之模板

下面的Nginx.conf实现nginx在前端做反向代理服务器的完整配置文件的例子,处理js、png等静态文件,jsp/php等动态请求转发到其它服务器tomcat/apacheuserwwwwww;worker_processesauto;worker_cpu_affinityauto;error_loglogs/error.log;worker_rlimit_nofile102400;pidl 查看详情

nginx高并发优化之静态文件缓存配置

一、配置httpopen_file_cachemax=65535inactive=20s;open_file_cache_valid30s;open_file_cache_min_uses4;open_file_cache_errorson;二、说明NGINX虽然已经对静态内容做过优化。但在高流量网站的情况下,仍然可以使用open_file_cache进一步提高性能。NGINX缓存将最... 查看详情

nginx高并发优化之缓冲配置

一、配置httpproxy_buffer_size256k;proxy_buffers4256k;proxy_busy_buffers_size256k;proxy_temp_file_write_size256k;proxy_max_temp_file_size128m;proxy_temp_path/usr/local/nginx/proxy_temp二、说明缓冲就是nginx代理缓冲从后端服 查看详情

nginx常见优化项和优化参数设置详解(代码片段)

优化Ngxin提高安全性实现高并发通过对Nginx的优化设置,使Nginx提高安全性的同时支持更多并发请求过通对Nginx所在宿主机Linux内核参数进行调整,使其更符合用于支持高并发访问的Web服务器Nginx配置优化编辑nginx.conf配置文... 查看详情

nginx事件驱动模型(秒懂+史上最全)(代码片段)

文章很长,建议收藏起来,慢慢读!Java高并发发烧友社群:疯狂创客圈奉上以下珍贵的学习资源:免费赠送经典图书:《Java高并发核心编程(卷1)》面试必备+大厂必备+涨薪必备加尼恩免费领免... 查看详情

nginx实现10w+并发之linux内核优化

...参数考虑的是最通用场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,是的Nginx可以拥有更高的性能;在优化内核时,可以做的事情很多,不过,我们通常会根据... 查看详情

nginx实现10w+并发之linux内核优化(代码片段)

...参数考虑的是最通用场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,是的Nginx可以拥有更高的性能;在优化内核时,可以做的事情很多,不过,我们通常会根据... 查看详情

qt信号槽异步事件驱动单线程多并发

...好Qt模块的异步信号槽,单线程同样可是实现很强悍的的并发能力。应付正常的功能是足够的。需要注意的是:该模式本质上为单线程事件驱动异步模式,所以需要做的事优化你的业务代码构架以应付性能与并发压力需求。(当... 查看详情

高并发之流量优化(代码片段)

工作原理1.通过Referer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。一旦检测到来源不是本站即进行阻止或者返回指定的页面。2.通过计算签名的方式,判断请求是否合法... 查看详情

haproxy+keepalived高可用群集

...换的开销及内存占用。事件检查器(eventchecker)允许其在高并发连接中对任何连接的任何事件实现即时探测。在任何可用的情况下, 查看详情

ssm实战——秒杀系统之高并发优化

一:高并发点高并发出现在秒杀详情页,主要可能出现高并发问题的地方有:秒杀地址暴露、执行秒杀操作。 二:静态资源(页面)访问优化——CDNCDN,内容分发网络。我们把静态的资源(html/css/js)放在CDN上,以加快用户... 查看详情

nginx是如何实现高并发?常见的优化手段有哪些?(代码片段)

...8255904053133827这是一位读者带回来的面试题Nginx是如何实现并发的?为什么Nginx不使用多线程?Nginx常见的优化手段有哪些?502错误可能原因有哪些?面试官心理分析主要是看应聘人员的对NGINX的基本原理是否熟悉&#x 查看详情

高并发之数据库优化(代码片段)

数据库缓存常见的缓存形式:内存缓存,文件缓存mysql查询缓存(了解即可)query-cache-type查询缓存类型,有0、1、2三个取值。0则不使用查询缓存。1表示始终使用查询缓存。2表示按需使用查询缓存。query_cache_type为1时,亦可关闭... 查看详情

优化nginx并发量

优化Nginx并发量1)优化前使用ab高并发测试客户端测试#yum-yinstallhttpd-tools.x86_64#ab-c200-n200http://192.168.4.5/#192.168.4.5后面的斜线/必须要敲。c代表client。ab是模拟器。n是number。200个人总共点了200次,相当于每个人1次。----------------------... 查看详情