啥都不懂Nginx高并发性能原因是个啥?

Posted IT原理

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了啥都不懂Nginx高并发性能原因是个啥?相关的知识,希望对你有一定的参考价值。

nginx采用的是多进程+epoll,能实现高并发,其可以支持的并发上限大概是同时支持5W个连接

1 多进程

  nginx在启动后,会有一个master进程和多个相互独立的worker进程,master进程接收来自外界的连接,并向各worker进程发送信号,每个进程都有可能来处理这个连接,master进程能监控worker进程的运行状态,当 worker 进程退出后(异常情况下),会自动启动新的worker进程

  【惊群现象】

  master进程首先通过 socket() 来创建一个socket文件描述符用来监听,然后fork生成子进程(workers 进程),那么当连接进来时,所有子进程都将收到master进程的通知并“争着”与它建立连接,这就叫“惊群现象”。大量的进程被激活又挂起,只有一个进程可以accept() 到这个连接,这当然会消耗系统资源

  【nginx对惊群现象的处理】

  nginx 提供了一个accept_mutex这个东西,即每个worker进程在执行accept之前都需要先获取锁,获取不到就放弃执行accept()。有了这把锁之后,同一时刻,就只会有一个进程去accpet(),这样就不会有惊群问题了

2 IO多路复用

  IO多路复用 :每个线程或者进程同时处理多个连接

  IO多路复用的三个阶段

  第1阶段 selector方式,使用fd_set结构体告诉内核去监控哪些文件句柄,采用遍历的方式检查是否有文件句柄就绪,然后再通知应用程序。他的缺点是文件句柄有上       限限制,并且效率不高,采用的是遍历方式

  第2阶段 poll方式,采用新的数据结构消取了文件句柄上限,但是还是采用遍历的方式检查文件句柄是否就绪

  第3阶段 epoll方式,通过epoll_ctl注册文件句柄,一旦该文件句柄就绪,epoll_wait便可以收到通知, 并通知应用程序进行处理,不用主动去遍历检查文件句柄是否就绪






更多推荐

以上是关于啥都不懂Nginx高并发性能原因是个啥?的主要内容,如果未能解决你的问题,请参考以下文章

nginx

Nginx多进程高并发低时延高可靠机制在滴滴缓存代理中的应用

Nginx总结实现高可用的负载均衡服务

nginx并发过载后

linux下nginx服务应用总结--突破10万高并发的nginx性能优化经验(含内核参数优化

Nginx高可用