首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

nginx惊群问题的解决方式

对于nginx的惊群问题,我们首先需要理解的是,在nginx启动过程中,master进程会监听配置文件中指定的各个端口,然后master进程就会调用fork()方法创建各个子进程,根据进程的工作原理,子进程是会继承父进程的全部内存数据以及监听的端口的,也就是说worker进程在启动之后也是会监听各个端口的。关于惊群,指的就是当客户端有新建连接的请求到来时,就会触发各个worker进程的连接建立事件,但是只有一个worker进程能够正常处理该事件,而其他的worker进程会发现事件已经失效,从而重新循环进入等待状态。这种由于一个事件而“惊”起了所有worker进程的现象就是惊群问题。很明显,如果所有的worker进程都被触发了,那么这将消耗大量的资源,本文则主要讲解nginx是如何处理惊群问题的。

02

epoll、poll、select的原理和区别

epoll是一种I/O事件通知机制,是linux 内核实现IO多路复用的一个实现。IO多路复用是指,在一个操作里同时监听多个输入输出源,在其中一个或多个输入输出源可用的时候返回,然后对其的进行读写操作。 epoll有两种工作方式, LT-水平触发 和ET-边缘触发(默认工作方式),主要区别是: LT,内核通知你fd是否就绪,如果没有处理,则会持续通知。而ET,内核只通知一次。 什么是I/O? 输入输出(input/output)的对象可以是文件(file), 网络(socket),进程之间的管道(pipe)。在linux系统中,都用文件描述符(fd)来表示。 什么是事件? IO中涉及到的行为,建立连接、读操作、写操作等抽象出一个概念,就是事件,在jdk中用类SelectionKey.java来表示,例如:可读事件,当文件描述符关联的内核读缓冲区可读,则触发可读事件(可读:内核缓冲区非空,有数据可以读取);可写事件,当文件描述符关联的内核写缓冲区可写,则触发可写事件(可写:内核缓冲区不满,有空闲空间可以写入)。 什么是通知机制? 通知机制,就是当事件发生的时候,则主动通知。通知机制的反面,就是轮询机制。

02
领券