Nginx进程调度问题详解

 更新时间:2021年09月18日 14:55:21   作者:Nginx进程调度  
Nginx采用的是固定数量的多进程模型,由一个主进程(MasterProcess)和数量与主机CPU核数相同的工作进程协同处理各种事件。这篇文章主要介绍了Nginx进程调度问题,需要的朋友可以参考下

Nginx采用的是固定数量的多进程模型,由一个主进程(MasterProcess)和数量与主机CPU核数相同的工作进程协同处理各种事件。

Nginx采用的是固定数量的多进程模型,由一个主进程(MasterProcess)和数量与主机CPU核数相同的工作进程协同处理各种事件。

主管理进程负责工作进程的配置加载、启停等操作,工作进程负责处理具体请求。进程间的资源都是独立的,每个工作进程处理多个连接,每个连接由一个工作进程全权处理,不需要进行进程切换,也就不会产生由进程切换引起的资源消耗问题。默认配置下,工作进程的数量与主机CPU核数相同,充分利用CPU和进程的亲缘性(affinity)将工作进程与CPU绑定,从而最大限度地发挥多核CPU的处理能力。

Nginx主进程负责监听外部控制信号,通过频道机制将相关信号操作传递给工作进程,多个工作进程间通过共享内存来共享数据和信息。

Tips:进程亲缘性(affinity),使进程或线程在指定的CPU(核)上运行。

Nginx的工作进程有如下几种调度方式:

  • 无调度模式:所有工作进程都会在连接事件被触发时争相与客户端建立连接,建立连接成功则开始处理客户端请求。无调度模式下所有进程都会争抢资源,但最终只有一个进程可以与客户端建立连接,对于系统而言这将在瞬间产生大量的资源消耗,这就是所谓的惊群现象。
  • 互斥锁模式:每个工作进程都会周期性地争抢互斥锁,一旦某个工作进程抢到互斥锁,就表示其拥有接收HTTP建立连接事件的处理权,并将当前进程的socket监听注入事件引擎(如epoll)中,接收外部的连接事件。其他工作进程只能继续处理已经建立连接的读写事件,并周期性地轮询查看互斥锁的状态,只有互斥锁被释放后工作进程才可以抢占互斥锁,获取HTTP建立连接事件的处理权。当工作进程最大连接数的1/8与该进程可用连接(free_connection)的差大于或等于1时,则放弃本轮争抢互斥锁的机会,不再接收新的连接请求,只处理已建立连接的读写事件。互斥锁模式有效地避免了惊群现象,对于大量HTTP的短连接,该机制有效避免了因工作进程争抢事件处理权而产生的资源消耗。但对于大量启用长连接方式的HTTP连接,互斥锁模式会将压力集中在少数工作进程上,进而因工作进程负载不均而导致QPS下降。
  • 套接字分片:套接字分片是由内核提供的一种分配机制,该机制允许每个工作进程都有一组相同的监听套接字。当有外部连接请求时,由内核决定哪个工作进程的套接字监听可以接收连接。这有效避免了惊群现象的发生,相比互斥锁机制提高了多核系统的性能。该功能需要在配置listen指令时启用reuseport参数。

Tips:Nginx 1.11.3以后的版本中互斥锁模式默认是关闭的。套接字分片模式则因为由Linux内核提供进程的调度机制,所以性能最好。

到此这篇关于Nginx进程调度问题的文章就介绍到这了,更多相关Nginx进程调度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nginx将泛解析的匹配域名绑定到子目录配置方法

    nginx将泛解析的匹配域名绑定到子目录配置方法

    这篇文章主要介绍了nginx将泛解析的匹配域名绑定到子目录配置方法,需要的朋友可以参考下
    2014-03-03
  • Nginx端口映射配置方法

    Nginx端口映射配置方法

    这篇文章主要介绍了Nginx端口映射配置方法和多端口映射,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 详解Centos7 源码编译安装 Nginx1.13

    详解Centos7 源码编译安装 Nginx1.13

    这篇文章主要介绍了详解Centos7 源码编译安装 Nginx1.13,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 详解Nginx日志配置及日志切割

    详解Nginx日志配置及日志切割

    本篇文章主要介绍了详解Nginx日志配置及日志切割,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Windows下使用Nginx+Tomcat做负载均衡的完整步骤

    Windows下使用Nginx+Tomcat做负载均衡的完整步骤

    这篇文章主要介绍了Windows下使用Nginx+Tomcat做负载均衡的完整步骤,帮助大家搭建负载均衡集群,感兴趣的朋友可以了解下
    2020-09-09
  • nginx安装及配置支持php的教程(全)

    nginx安装及配置支持php的教程(全)

    本文的实验环境为:Centos4.5,nginx版本为:nginx-0.7.26
    2013-02-02
  • Nginx服务器高性能优化的配置方法小结

    Nginx服务器高性能优化的配置方法小结

    这篇文章主要介绍了Nginx服务器高性能优化的配置方法小结,包括一些内核参数的优化介绍,需要的朋友可以参考下
    2015-12-12
  • 使用Nginx实现灰度发布的使用

    使用Nginx实现灰度发布的使用

    这篇文章主要介绍了使用Nginx实现灰度发布的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Nginx中break与last的区别详析

    Nginx中break与last的区别详析

    这篇文章主要给大家介绍了关于Nginx中break与last区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • nginx上传文件大小报错500的解决办法

    nginx上传文件大小报错500的解决办法

    这篇文章主要介绍了nginx上传文件大小报错解决办法的相关资料,小文件可以提交,大文件会报500内部错误,这里提供解决办法,需要的朋友可以参考下
    2017-08-08

最新评论