nginx 进程管理
nginx 进程管理
六飞鞋影魔 发表于1年前
nginx 进程管理
  • 发表于 1年前
  • 阅读 13
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: Nginx采用一个master管理进程、多个worker工作进程、一个可选的cache manager 进程、一个cache loader进程。服务器的进程管理其实都差不多,如Mysql innodb进程的管理:一个master进程、4个IO thread 、一个锁监控进程、一个错误监控进程

Nginx采用一个master管理进程、多个worker工作进程、一个可选的cache manager 进程、一个cache loader进程。服务器的进程管理其实都差不多,如Mysql innodb进程的管理:一个master进程、4个IO thread 、一个锁监控进程、一个错误监控进程

Nginx进程管理优点:

  • 利用多核系统的并发处理能力

现代操作系统已经支持多核CPU架构,这使得多个进程可以占用不同的CPU核心来工作。Nginx中所有的worker工作进程都是完全平等的。这提高了网络性能、降低了请求的时延

  • 负载均衡

多个worker工作进程间通过进程竟能令严实现负载均衡,即一个请求到来时更容易被分配到负载较轻的worker工作进程中处理。

  • 管理进程会负责监控工作进程的状态,并负责管理其行为

管理进程不会占用多少系统资源,它只是用来启动、停止、监控或者使用其他行为来控制工作进程。首先,提高了系统的可靠性,当工作进程出现问题时,管理进程可以启动新的工作进程来避免系统的性能下降。其实管理进程支持Nginx服务运行中程序升级、配置修改等操作,这种设计使得动态可拓展性、动态定制性、动态进化性较容易实现。

Worder进程工作原理:

nginx采用信号的方式来通过master进程对worker的控制,当master发出信号时worker通过ngx_signal_handler方法来处理。

如:当接收到QUIT信号时,ngx_quit标志会置为1,这是在告诉worker进程需要优雅地关闭进程; 当接收到TERM信号时,ngx_terminate标志会置为1,worker进程则强制关闭进程;当接收到USR1信号时,ngx_reopen标志位置为1,nginx则重新打开文件(如切换日志文件)

worker进程流程图:

Master进程工作原理:

master进程不需要处理网络事件,它不负责业务的执行,只会通过管理worker等子进程来实现重启服务、平滑升级、更换日志文件、配制文件实时生效等功能。它会通过检查7个标志位(ngx_reap、ngx_quit、ngx_terminate、ngx_reconfigure、ngx_reopen、ngx_change_binary、ngx_noaccept)来决定ngx_master_process_cycle方法的运行。

 

  • 进程中接收到的信号对nginx框架的意义
信号  对应进程中的全局标志位变量  意义
QUIT ngx_quit 优雅关闭整个服务
TERM 或者INT ngx_terminate 强制关闭整个服务
USR1 ngx_reopen 重新打开服务中所有文件
WINCH ngx_noaccept 所有子进程不再接受处理新的连接
USR2 ngx_change_binary 平滑升级到新版本的nginx程序
HUP ngx_reconfigure 重读配置文件并使服务对新配置项生效
CHLD ngx_reap 有子进程意外结束,这时需要监控所有子进程

别外还有一个标志位也会用到,它仅仅是在master工作流程中为标志位使用,与信号无关

ngx_unit_t     ngx_restart;

master进程fork一个子进程会存储在ngx_processes的全局数组选择一个未使用的元素中。如果子进程数超过最大值1024,会返回NGX_INVALID_PID。 ngx_processes数据中这些进程都是依靠信号来改变进程的状态的。当每个子进程意外退出时,master父进程会接收到Linux内核发来的CHLD信息,而处理信息的ngx_signal_handler会把:sig_reap标志位置为1,调用ngx_process_get_status方法并修改ngx_processes数组中所有子进程的状态

master工作流程图如下

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 1
博文 11
码字总数 5446
×
六飞鞋影魔
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: