iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Nginx中进程管理和重载的原理是什么
  • 747
分享到

Nginx中进程管理和重载的原理是什么

2023-06-14 19:06:47 747人浏览 泡泡鱼
摘要

本篇文章给大家分享的是有关Nginx中进程管理和重载的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。进程结构图Nginx是多进程结构,多进程结构设计是为了保证Ngin

本篇文章给大家分享的是有关Nginx中进程管理和重载的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

进程结构图

Nginx是多进程结构,多进程结构设计是为了保证Nginx的高可用高可靠,包含:

  • master进程:父进程,负责worker进程的管理

  • worker进程:子进程,worker进程一般配置与服务器CPU核数相同,worker进程用来处理具体请求。

  • cache进程:也是子进程,包括cache manager和cache loader进程,主要是反向代理做缓存使用。

注:多进程相对于多线程之所以能够保证高可用与高可靠是因为进程间地址空间是独立的,进程间的任务不会相互影响,相对多线程更加耗费CPU资源。而多线程共享一个进程的地址空间,其中一个线程任务失败会影响到其它线程任务。

Nginx中进程管理和重载的原理是什么

图3-1 Nginx进程结构图

假设我们的Nginx服务的用户是nginx,我们可以使用如下命令查看当前运行的Nginx服务的master进程和worker进程,而且可以看到4个worker进程的父进程ID都是master的进程ID(1325)。

[root@master ~]# ps -ef | grep nginx | grep -v grep | grep -v PHP-fpmroot       1325      1  0 11:28 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginxnginx      1332   1325  0 11:28 ?        00:00:00 nginx: worker processnginx      1334   1325  0 11:28 ?        00:00:00 nginx: worker processnginx      1335   1325  0 11:28 ?        00:00:00 nginx: worker processnginx      1336   1325  0 11:28 ?        00:00:00 nginx: worker process

Nginx中进程管理和重载的原理是什么

图3-2 一个master进程与四个worker子进程

我们可以通过 lsof -i:nginx端口号 来查看我们的master和worker进程。

[root@master ~]# lsof -i:80COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF node NAMEnginx   1325  root    6u  IPv4  22282      0t0  tcp *:Http (LISTEN)nginx   1332 nginx    6u  IPv4  22282      0t0  TCP *:http (LISTEN)nginx   1334 nginx    6u  IPv4  22282      0t0  TCP *:http (LISTEN)nginx   1335 nginx    6u  IPv4  22282      0t0  TCP *:http (LISTEN)nginx   1336 nginx    6u  IPv4  22282      0t0  TCP *:http (LISTEN)

信号量管理

Linux的信号量管理机制

信号是进程间通信方式之一,典型用法是:终端用户输入中断命令,通过信号机制停止一个程序的运行。

我们可以通过给进程发送信号来管理我们的进程,kill -l命令可以查看linux支持的信号量

Nginx中进程管理和重载的原理是什么

linux信号量

一共有64号信号量,主要需要弄清如下几个:

kill -1 $PID:(SIGHUP)重新加载进程,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件;

kill -2 $PID:(SIGINT)中断(通Ctrl+C);

kill -3 $PID:(SIGQUIT)从键盘输入的退出(ctrl-\);

kill -9 $PID:(SIGKILL)立即杀死进程,无论当前程序处于什么状态;

kill -10 $PID:(SIGUSR1)$USR1和$USR2都是留给用户自定义的信号量;

kill -12 $PID:($IGUSR2)

kill -15 $PID:(SIGTERM)正常停止一个进程;

kill -17 $PID:(SIGCHLD)父子进程通信的信号量,父进程可以fork()出很多子进程,子进程挂掉会给父进程发送信号;

kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 jobs 指令查看。

kill -l # 查看所有能够支持的信号kill PID# 杀死一个进程kill 1024# 杀死多个进程 进程号之间用空格隔开kill 1024 2048# kill -9 表示立即强制结束进程kill -9 1024

注:Ctrl+C:停止终端中正在运行的进程,Ctrl+C可以比较有好地中止终端中正在运行的程序(进程)

利用信号量管理Nginx进程

管理Nginx进程可以这些方式:master进程worker进程命令行

使用信号量管理master和worker(不推荐使用发送信号量的方式来管理worker进程,worker进程应该交给master进程来管理和维护)。

Master进程

监控worker进程

  • CHLD

管理worker进程

接收信号

  • TERM、INT

  • QUIT

  • HUP

  • USR1

  • USR2

  • WINCH

示例:

通过kill命令杀死master进程

kill -s SIGTERM 1325

通过kill命令让Nginx重新读取文件,这样会关闭就得worker进程,生成新的worker进程,master进程(ID)依旧保持不变

kill -s SIGHUP 1325

Worker进程

接收信号

  • TERM、INT

  • QUIT

  • USR1

  • WINCH

虽然可以,但是不推荐使用信号量方式直接管理worker进程,worker进程应该交给master进程来管理和维护

示例:

使用kill命令杀死一个worker进程,这样会杀死一个worker进程,linux会杀掉的worker进程的父进程(master进程)发送SIGCHLD信号量,所以master进程监测到我们某一个子进程可能出了问题,会启动一个新的worker进程,维护worker进程的数量。

kill -s SIGTERM 1332

命令行

  • reload:HUP

  • reopen:USR2

  • stop:TERM

  • quit:QUIT

可以使用nginx -h查看帮助命令

[itbsl@master ~]$ nginx -hnginx version: nginx/1.18.0Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]Options:  -?,-h         : this help  -v            : show version and exit  -V            : show version and configure options then exit  -t            : test configuration and exit  -T            : test configuration, dump it and exit  -q            : suppress non-error messages during configuration testing  -s signal     : send signal to a master process: stop, quit, reopen, reload  -p prefix     : set prefix path (default: /usr/local/nginx-1.18.0/)  -c filename   : set configuration file (default: conf/nginx.conf)  -g directives : set global directives out of configuration file

参数说明:

  • -?,-h:查看帮助

  • -v:查看Nginx版本

  • -V:查看Nginx版本和编译选项

  • -t:检查配置文件语法是否正确

  • -T:检查配置文件语法是否正确,并打印

  • -q:在检查配置文件时不显示非错误消息

  • -s:给master进程发送信号,可以发送:stop、quit、reopen、reload

  • -c:指定配置文件

  • -g:设置配置文件之外的全局指令

配置文件重载原理

我们知道了可以通过给nginx的master进程发送SIGHUP信号,或者使用nginx -s reload命令来达到重新载入配置文件,从而使nginx平滑升级。那我们执行这样一个命令之后,对nginx本身来说背后发生了什么事情呢,它是如何保证新老请求如何平滑过渡的?

reload重载配置文件的流程

  • 向master进程发送HUP信号(reload命令)

  • master进程检查配置语法是否正确

  • master进程打开监听端口(在修改配置文件的端口情况下,可能)

  • master进程使用新的配置文件启动新的worker子进程

  • master进程向老的worker子进程发送QUIT信号

  • 旧的worker进程关闭监听句柄,处理完当前连接后关闭进程

如果用图示来描述的话大概如下图所示

Nginx中进程管理和重载的原理是什么

nginx -s reload

图示解析:

左边绿色的状态是执行nginx -s reload命令之前的状态,按照我个人主机的配置时一个master进程和4个worker子进程。

为了模拟执行nginx -s reload命令后原来的worker进程会处理完请求后再被杀掉,我模拟一个需要很久才能处理完任务并响应的接口,是的,我在代码里sleep 15秒,也就是说这个接口响应需要15秒,时间弄长点方便我们来观察中间态,注意,在执行reload命令前请求该接口

<?php    sleep(15);    echo JSON_encode(['msg' => 'hello world']);die();

我们已经知道了master进程会把任务交给worker子进程处理,目前只有一个任务,所以当前只需要一个worker进程需要处理任务。

执行reload命令,master进程会创建4个(与你配置有关)新的worker进程(我上图中的黄色worker进程),关闭掉旧的空闲worker进程(绿色worker进程),而正在处理请求的旧worker进程不会立即关闭,而是会等请求处理完毕就关闭。

剩下的最后一个旧worker进程任务处理完毕也被关掉,最后剩下的都是使用新nginx.conf配置产生的新worker进程,可以看下面的这张图,那个处于is shutting down的旧worker进程就是因为处理上面sleep 15秒的任务接口还没处理完毕,所以依然能够被看到。

Nginx中进程管理和重载的原理是什么

以上就是Nginx中进程管理和重载的原理是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: Nginx中进程管理和重载的原理是什么

本文链接: https://www.lsjlt.com/news/274280.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Nginx中进程管理和重载的原理是什么
    本篇文章给大家分享的是有关Nginx中进程管理和重载的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。进程结构图Nginx是多进程结构,多进程结构设计是为了保证Ngin...
    99+
    2023-06-14
  • Nginx进程管理和重载原理详解
    进程结构图 Nginx是多进程结构,多进程结构设计是为了保证Nginx的高可用高可靠,包含: master进程:父进程,负责worker进程的管理 worker进程...
    99+
    2024-04-02
  • nginx负载均衡的原理是什么
    Nginx负载均衡的原理是将客户端的请求分发给多个后端服务器,以实现请求的平衡分配和提高系统的性能和可扩展性。具体而言,Nginx负...
    99+
    2023-09-02
    nginx 负载均衡
  • Linux进程管理的负载均衡是什么
    本篇内容介绍了“Linux进程管理的负载均衡是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!经过前面的学习,我们知道一个 task 有如...
    99+
    2023-06-15
  • Nginx的基本概念和原理是什么
    这篇文章将为大家详细讲解有关Nginx的基本概念和原理是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、Nginx基本概念(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供...
    99+
    2023-06-29
  • nginx负载均衡算法及原理是什么
    Nginx负载均衡算法及原理主要涉及以下几个方面:1. 轮询(Round Robin)算法:Nginx默认采用的是轮询算法,即将请求...
    99+
    2023-10-08
    nginx
  • nginx作用和工作原理是什么
    nginx是一种高性能的开源Web服务器和反向代理服务器。它可以用于处理静态和动态的HTTP、HTTPS、SMTP、POP3和IMA...
    99+
    2023-10-07
    nginx
  • Python中的内存管理的原理是什么?
    Python中的内存管理的原理是什么?Python是一种高级的、动态类型的编程语言,具有自动垃圾回收功能。Python内存管理的原理基于引用计数机制和垃圾回收机制。引用计数机制是Python内存管理的基础。每个对象都会有一个引用计数器,用于...
    99+
    2023-10-22
    内存管理原理 Python内存管理 内存分配策略
  • Node.js进程退出的原理是什么
    今天小编给大家分享一下Node.js进程退出的原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。原理一个进程要退出,无...
    99+
    2023-06-29
  • Linux 进程管理中的CFS负载均衡有什么用
    本篇内容介绍了“Linux 进程管理中的CFS负载均衡有什么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 什么是负载均衡前面的...
    99+
    2023-06-15
  • 进程管理器中的chrome.exe *32是什么意思?
    在64位的 Windows 中,你可能会发现带有*32后缀的进程名,尤其是 chrome.exe *32(如下图),这代表什么意思呢? 64位的 Windows 中包含了32位应用程序的运行环境,可以让64位和32位的应...
    99+
    2023-06-16
    进程管理器 chrome.exe exe 意思 chrome 管理器 进程
  • ajax的原理和流程是什么
    Ajax的全称是Asynchronous JavaScript and XML,即异步JavaScript和XML。它是一种在Web...
    99+
    2023-05-13
    ajax的原理 ajax
  • Python中的上下文管理器原理是什么
    这篇“Python中的上下文管理器原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python中的上下文管理器原理是...
    99+
    2023-07-05
  • python中上下文管理器的原理是什么
    今天就跟大家聊聊有关python中上下文管理器的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WE...
    99+
    2023-06-14
  • C++内存管理原理是什么
    这篇文章主要讲解了“C++内存管理原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++内存管理原理是什么”吧!1.C/C++中程序内存分布C/C++中程序内存区域大致划分为:内核空...
    99+
    2023-06-25
  • Nginx的模块与工作原理是什么
    小编给大家分享一下Nginx的模块与工作原理是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一.  Nginx的模块与工作原理Nginx由内核和模块...
    99+
    2023-06-15
  • Python中的进程池和线程池的适用场景和实现原理是什么?
    Python中的进程池和线程池的适用场景和实现原理是什么?引言:在编写程序时,为了提高执行效率,经常会使用并发编程来同时执行多个任务。Python提供了进程池和线程池这两种用于并发处理任务的工具。本文将详细介绍进程池和线程池的适用场景和实现...
    99+
    2023-10-22
    线程池 实现原理 进程池 适用场景
  • 负载均衡的原理是什么
    负载均衡的原理是指将大量请求作业合理地分摊到多个操作单元上进行执行,从而解决网络中的高并发和高可用问题。具体内容如下:负载均衡是高可用网络基础架构的一个关键组成部分,有了负载均衡,我们通常可以将我们的应用服务器部署多台,然后通过负载均衡将用...
    99+
    2024-04-02
  • require加载器的原理是什么
    这篇文章给大家介绍require加载器的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.node模块化的实现node中是自带模块化机制的,每个文件就是一个单独的模块,并且它遵循的是CommonJS规范,也就...
    99+
    2023-06-14
  • linux系统进程管理的方法是什么
    Linux系统中,可以使用以下方法来进行进程管理:1. 系统监控工具:Linux系统自带了一些用于监控和管理进程的工具,如top、h...
    99+
    2023-09-15
    linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作