• nginx重新整理——————nginx 的设计模型[八]


    前言

    简单介绍一下nginx的设计模型,对我们设计程序还是有一定帮助的。

    正文

    这里先列一下模型哈,后面有深入篇,介绍的比较清楚。

    nginx 的处理模型:

    nginx 进程模型:

    可以看到下面列出了进程:

    这里的worker 进程只有一个哈。

    同样可以看到他们的关系,父进程是master process nginx。

    然后我们看一下nginx -s reload 重新加载配置做了什么,前文提及到一个东西,那就是这个是让worker 优雅的退出。

    执行完后再看一下:

    上面那两个进程不见了,取而代之的是后面那两个进程。

    有时候我们执行nginx -s reload 不生效,这是为什么呢,因为是优雅退出,老的还在处理,所以可以观察一下进程。

    同样这个命令其实也是和kill -HUB pid一样的。

    同样nginx -s quit,也是有对应的命令的,kill -SIGTERM pid 效果其实是一样的。

    对worker pid 执行:kill -SIGTERM pid,那么workder 会优雅推出。但是父进程检测到和其期望的不相符合,那么会再创建一个。

    对父进程执行kill -SIGTERM pid 其实和nginx -s quit 一样的。

    那么还有那些信号量可以管理nginx的进程呢?

    master 进程:

    监控worker 进程: CHLD(当子进程结束的时候要向父进程发送CHLD信号)
    管理worker 进程
    接收信号:
    term,int(立即停止)
    quit(优雅停止)
    hub(重载配置文件)
    usr1(重新打开日志文件)
    usr2(只能通过kill 发送, 热部署)
    winch(只能通过kill发送,停止worker)
    

    worker 进程:

    term,int(立即停止)
    quit(优雅停止)
    usr1(重新打开日志文件)
    winch(只能通过kill发送,停止worker)
    

    nignx命令行:

    reload :HUP
    reopen:USR1
    stop:TERM
    quit:QUIT
    

    reload 执行流程:

    1. 向master 进程发送hub 信号(reload 命令)

    2. master 进程校验配置语法是否正确

    3. master 进程重新打开新的监听端口

    4. master 进程用新配置启动新的worker 自进程

    5. master 进程向老wokrer 进程发送quit信号

    6. 老worker 进程关闭监听句柄,处理完当前连接后结束进程

    可以看到只有到这个关闭监听句柄了,才真的老的worker才不做处理了。

    然后quit之后,master 会有一个定时器,如果worker 还没有退出,那么master 会强制杀死worker进程。

    热升级流程:

    1. 将旧的nginx 换成新的nginx 文件

    2. 向master 进程发送usr2信号

    3. master 进程修改pid 文件名,加后缀.oldbin

    4. master进程用新的nginx 文件启动新的master 进程

    5. 向老的master 进程发送winch信号,关闭老的worker

    6. 回滚:向老的master 发送hup,想新的master 发送quit。

    优雅退出worker 过程:

    1. 设置定时器 worker_shutdown_timeout

    2. 关闭监听句柄

    3. 关闭空闲链接

    4. 在循环中等待全部连接关闭

    5. 退出进程

    这个循环中等待全部连接关闭,可能很长时间,如果到达了worker_shutdown_timeout设置的时间,那么也会被强制关闭。

    下一届介绍nginx的网络模型。

  • 相关阅读:
    【转载】深入浅出VA函数
    oracle数据库怎么创建数据库实例
    2.4 OpenEuler中C语言中的函数调用测试(选做)
    OpenEuler 中C与汇编的混合编程(选做)
    程序运行
    改进ls的实现(课下作业)
    学习笔记12
    实验四 Web服务器1socket编程
    实验四 Web服务器2
    学习6
  • 原文地址:https://www.cnblogs.com/aoximin/p/16215573.html
Copyright © 2020-2023  润新知