浅谈nginx多进程模型
浅谈nginx多进程模型
摘自:https://zhuanlan.zhihu.com/p/60504120
nginx是一款高性能的Web服务器,由于它优秀的性能、成熟的社区、完善的文档,受到广大开发者的喜爱和支持。它的高性能与其架构是分不开的,nginx的框架如下图所示:
nginx架构图-来源于网上
Nginx是经典的多进程模型,它启动以后以守护进程的方式在后台运行,后台进程包含一个master进程,和多个worker进程。其中master进程相当于控制进程,有以下作用:
- 接收外界信号执行指令,包括配置加载、向worker发指令、优雅退出等等。
- 维护worker进程的状态,当worker进程退出后,自动启动新的worker。
其中 master 进程支持的信号处理如下:
- TERM、INT:快速退出
- QUIT:优雅退出
- HUP: 变更配置,用新配置启动worker,优雅关闭老的worker等。
- USR1: 重新打开日志文件
- USR2: 升级二进制文件(nginx升级)
- WINCH: worker进程的优雅退出
单个worker进程也支持信号处理,包括:
- TERM、INT: 快速退出
- QUIT: 优雅退出
- USR1: 重新打开日志文件
- WINCH: 终端调试等
worker进程基于异步非阻塞的模式处理每个请求,这种非阻塞的模式,大大提高了worker进程处理请求的速度。为了尽可能的提高性能,nginx对每个worker进程设置了CPU的亲和性,尽量把worker进程绑定在指定的CPU上执行,以减少上下文切换带来的开销。由于这种绑核的模式,一般推荐worker进程的数目,为CPU的核数。
nginx使用了master<->worker这种多进程的模型,有哪些好处呢?
- worker进程间很少共享资源,在处理各自请求时,几乎不用加锁,省掉了锁带来的开销。
- worker进程间异常不会相互影响,一个进程挂掉之后,其他进程还在工作,可以提高服务的稳定性。
- 尽可能的利用多核特性,最大化利用系统资源。