大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 Nginx進(jìn)程管理與重載原理

Nginx進(jìn)程管理與重載原理

更新時(shí)間:2021-12-17 12:51:36 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2144次

進(jìn)程結(jié)構(gòu)圖

Nginx 是多進(jìn)程結(jié)構(gòu),多進(jìn)程結(jié)構(gòu)設(shè)計(jì)是為了保證 Nginx 的高可用高可靠,包含:

master 進(jìn)程:父進(jìn)程,負(fù)責(zé) worker 進(jìn)程的管理

worker 進(jìn)程:子進(jìn)程,worker 進(jìn)程一般配置與服務(wù)器 CPU 核數(shù)相同,worker 進(jìn)程用來(lái)處理具體請(qǐng)求。

cache 進(jìn)程:也是子進(jìn)程,包括 cache manager 和 cache loader 進(jìn)程,主要是反向代理做緩存使用。

注:多進(jìn)程相對(duì)于多線程之所以能夠保證高可用與高可靠是因?yàn)檫M(jìn)程間地址空間是獨(dú)立的,進(jìn)程間的任務(wù)不會(huì)相互影響,相對(duì)多線程更加耗費(fèi) CPU 資源。而多線程共享一個(gè)進(jìn)程的地址空間,其中一個(gè)線程任務(wù)失敗會(huì)影響到其它線程任務(wù)。

假設(shè)我們的 Nginx 服務(wù)的用戶是 nginx,我們可以使用如下命令查看當(dāng)前運(yùn)行的 Nginx 服務(wù)的 master 進(jìn)程和 worker 進(jìn)程,而且可以看到 4 個(gè) worker 進(jìn)程的父進(jìn)程 ID 都是 master 的進(jìn)程 ID(1325)。

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

我們可以通過 lsof -i:nginx 端口號(hào) 來(lái)查看我們的 master 和 worker 進(jìn)程。

[root@master ~]# lsof -i:80
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   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)

利用信號(hào)量管理 Nginx 進(jìn)程

管理 Nginx 進(jìn)程可以這些方式:master 進(jìn)程、worker 進(jìn)程、命令行

使用信號(hào)量管理 master 和 worker(不推薦使用發(fā)送信號(hào)量的方式來(lái)管理 worker 進(jìn)程,worker 進(jìn)程應(yīng)該交給 master 進(jìn)程來(lái)管理和維護(hù))。

Master 進(jìn)程

監(jiān)控 worker 進(jìn)程 CHLD

管理 worker 進(jìn)程

接收信號(hào) TERM、INTQUITHUPUSR1USR2WINCH

示例:

通過 kill 命令殺死 master 進(jìn)程

kill -s SIGTERM 1325

通過 kill 命令讓 Nginx 重新讀取文件,這樣會(huì)關(guān)閉就得 worker 進(jìn)程,生成新的 worker 進(jìn)程,master 進(jìn)程(ID)依舊保持不變

kill -s SIGHUP 1325

Worker 進(jìn)程

接收信號(hào) TERM、INTQUITUSR1WINCH

雖然可以,但是不推薦使用信號(hào)量方式直接管理 worker 進(jìn)程,worker 進(jìn)程應(yīng)該交給 master 進(jìn)程來(lái)管理和維護(hù)

示例:

使用 kill 命令殺死一個(gè) worker 進(jìn)程,這樣會(huì)殺死一個(gè) worker 進(jìn)程,linux 會(huì)殺掉的 worker 進(jìn)程的父進(jìn)程(master 進(jìn)程)發(fā)送 SIGCHLD 信號(hào)量,所以 master 進(jìn)程監(jiān)測(cè)到我們某一個(gè)子進(jìn)程可能出了問題,會(huì)啟動(dòng)一個(gè)新的 worker 進(jìn)程,維護(hù) worker 進(jìn)程的數(shù)量。

kill -s SIGTERM 1332

命令行

reload:HUP

reopen:USR2

stop:TERM

quit:QUIT

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

[itbsl@master ~]$ nginx -h
nginx version: nginx/1.18.0
Usage: 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

參數(shù)說(shuō)明:

-?,-h:查看幫助

-v:查看 Nginx 版本

-V:查看 Nginx 版本和編譯選項(xiàng)

-t:檢查配置文件語(yǔ)法是否正確

-T:檢查配置文件語(yǔ)法是否正確,并打印

-q:在檢查配置文件時(shí)不顯示非錯(cuò)誤消息

-s:給 master 進(jìn)程發(fā)送信號(hào),可以發(fā)送:stop、quit、reopen、reload

-c:指定配置文件

-g:設(shè)置配置文件之外的全局指令

配置文件重載原理

我們知道了可以通過給 nginx 的 master 進(jìn)程發(fā)送 SIGHUP 信號(hào),或者使用 nginx -s reload 命令來(lái)達(dá)到重新載入配置文件,從而使 nginx 平滑升級(jí)。那我們執(zhí)行這樣一個(gè)命令之后,對(duì) nginx 本身來(lái)說(shuō)背后發(fā)生了什么事情呢,它是如何保證新老請(qǐng)求如何平滑過渡的?

reload 重載配置文件的流程

向 master 進(jìn)程發(fā)送 HUP 信號(hào)(reload 命令)

master 進(jìn)程檢查配置語(yǔ)法是否正確

master 進(jìn)程打開監(jiān)聽端口(在修改配置文件的端口情況下,可能)

master 進(jìn)程使用新的配置文件啟動(dòng)新的 worker 子進(jìn)程

master 進(jìn)程向老的 worker 子進(jìn)程發(fā)送 QUIT 信號(hào)

舊的 worker 進(jìn)程關(guān)閉監(jiān)聽句柄,處理完當(dāng)前連接后關(guān)閉進(jìn)程

如果用圖示來(lái)描述的話大概如下圖所示

圖示解析:

1.左邊綠色的狀態(tài)是執(zhí)行 nginx -s reload 命令之前的狀態(tài),按照我個(gè)人主機(jī)的配置時(shí)一個(gè) master 進(jìn)程和 4 個(gè) worker 子進(jìn)程。

2.為了模擬執(zhí)行 nginx -s reload 命令后原來(lái)的 worker 進(jìn)程會(huì)處理完請(qǐng)求后再被殺掉,我模擬一個(gè)需要很久才能處理完任務(wù)并響應(yīng)的接口,是的,我在代碼里 sleep 15 秒,也就是說(shuō)這個(gè)接口響應(yīng)需要 15 秒,時(shí)間弄長(zhǎng)點(diǎn)方便我們來(lái)觀察中間態(tài),注意,在執(zhí)行 reload 命令前請(qǐng)求該接口

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

3.我們已經(jīng)知道了 master 進(jìn)程會(huì)把任務(wù)交給 worker 子進(jìn)程處理,目前只有一個(gè)任務(wù),所以當(dāng)前只需要一個(gè) worker 進(jìn)程需要處理任務(wù)。

4.執(zhí)行 reload 命令,master 進(jìn)程會(huì)創(chuàng)建 4 個(gè)(與你配置有關(guān))新的 worker 進(jìn)程(上圖中的黃色 worker 進(jìn)程),關(guān)閉掉舊的空閑 worker 進(jìn)程(綠色 worker 進(jìn)程),而正在處理請(qǐng)求的舊 worker 進(jìn)程不會(huì)立即關(guān)閉,而是會(huì)等請(qǐng)求處理完畢就關(guān)閉。

5.剩下的最后一個(gè)舊 worker 進(jìn)程任務(wù)處理完畢也被關(guān)掉,最后剩下的都是使用新 nginx.conf 配置產(chǎn)生的新 worker 進(jìn)程,可以看下面的這張圖,那個(gè)處于 is shutting down 的舊 worker 進(jìn)程就是因?yàn)樘幚砩厦?sleep 15 秒的任務(wù)接口還沒處理完畢,所以依然能夠被看到。

通過上述相信大家對(duì)Nginx進(jìn)程管理與重載原理已經(jīng)有所了解,如果您想了解更多相關(guān)知識(shí),不妨來(lái)關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線學(xué)習(xí),里面的課程內(nèi)容全面,從入門到精通,適合沒有基礎(chǔ)的小白學(xué)習(xí),希望對(duì)大家能夠有所幫助。

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-10-10 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 四虎国产精品永久地址49 | 国产精品亚洲玖玖玖在线靠爱 | 国产视频一区在线播放 | 国产性生活 | 久青草国产手机视频免费观看 | 伊人久久国产免费观看视频 | 国产一区二区三区免费视频 | 天天爱天天色 | 在线观看久草视频 | 成人毛片免费观看视频大全 | 欧美精品99| 伊人久久综合谁合综合久久 | 九九免费精品视频在这里 | 欧日韩一区二区三区 | 中文字幕久热精品视频免费 | 一区二区三区免费在线观看 | 国产色丁香久久综合 | 久久国产精品亚洲综合 | 激情五月开心婷婷 | 日本人成18在线播放 | 黄色毛片大全 | 国产高清免费午夜在线视频 | 国产成人国产在线观看入口 | 天天视频黄| 国产高清国产精品国产k | 欧美一级在线全免费 | 免费福利入口在线观看 | 中中文字幕亚州无线码 | 久久精品国产一区二区三区不卡 | 欧美精品四虎在线观看 | 狼人久久尹人香蕉尹人 | 999精品久久久中文字幕蜜桃 | freesex寂寞老妇hd | 一区在线观看 | 国产aaa毛片| 欧美成人在线免费观看 | 在线观看日本人免费视频色 | 国产麻豆视频在线看网站 | 中国一级全黄的免费观看 | 日韩中文字幕精品 | 精品图区 |