真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

探究Nginx中reload流程的原理真相-創(chuàng)新互聯(lián)

今天這篇文章主要來介紹下 Nginx 的 reload 流程。實際上在之前文章中,在更改了 nginx 配置文件時,我們都會執(zhí)行 nginx -s reload 命令,我們執(zhí)行這條命令的原因是希望 nginx 不停止服務始終在處理新的請求的同時把 nginx 的配置文件平滑的把舊的 nginx.conf 配置更新為新的 nginx.conf 配置。

創(chuàng)新互聯(lián)是專業(yè)的鷹手營子網(wǎng)站建設公司,鷹手營子接單;提供成都做網(wǎng)站、成都網(wǎng)站制作,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行鷹手營子網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

這樣一個功能對于 nginx 非常有必要,但是有時候我們會發(fā)現(xiàn)在執(zhí)行 nginx -s reload 命令后,worker 子進程的數(shù)量會變多了,這是因為老的配置運行的 worker 進程長時間沒有退出,當使用 stream 做四層反向代理的時候,可能這種場景會更多。

那么下面我們通過分析 nginx 的 reload 流程,來探究下 nginx 到底做了些什么?所謂優(yōu)雅的退出和立即退出有什么區(qū)別?

reload 流程

第一步在修改好 nginx 的配置文件 nginx.conf 后,向 master 進程發(fā)送 HUP 信號,這實際上和我們在命令行執(zhí)行 nginx -s reload 命令效果是一樣的。

那么 master 進程在收到 HUP 信號以后,會在第二步檢查我們的配置文件語法是否正確,也就是說我們并不一定非要在 nginx -s reload 前執(zhí)行 nginx -t 檢驗下語法是否正確,因為在第二步 nginx 的 master 進程一定會執(zhí)行這個步驟。

在 nginx 的配置語法全部正確以后,master 進程會打開新的監(jiān)聽端口,為什么要在 master 進程中打開新的監(jiān)聽端口?因為我們可能在 nginx.conf 中會引入新的例如 443 或者之前我們沒有打開的的監(jiān)聽端口,而所有 worker 進程是 master 進程 的子進程,子進程會繼承父進程所有已經(jīng)打開的端口,這是 linux 操作系統(tǒng)定義的,所以第三步,我們 master 進程打開了可能引入的新的監(jiān)聽端口。

接下來 mster 進程會用新的 nginx.conf 配置文件來啟動新的 worker 子進程,那么老的 worker 子進程會怎么樣呢?

我們會在第五步在啟動新的 worker 子進程以后,由 master 進程再向老 worker 子進程發(fā)送 QUIT 信號,QUIT 信號和 TERM,INT 信號是不一樣的,QUIT 信號是請優(yōu)雅地關(guān)閉子進程,這時候需要關(guān)注順序,因為 nginx 需要保證平滑,所以要先啟動新的 worker 子進程,再向老的 worker 子進程發(fā)送 QUIT 信號。

那么老的 master 子進程收到 QUIT 信號后,首先關(guān)閉監(jiān)聽句柄,也就是說這個時候新的連接只會到新的 worker 子進程,所以雖然他們之間有時間差,但是時間是非??焖俚?,那么關(guān)閉監(jiān)聽句柄后,處理完當前連接后就結(jié)束進程。

下面看 reload 不停機載入新配置的圖示。

reload 不停機載入新配置

master 進程上原先有四個綠色的 worker 子進程,它們使用了老的配置,當我們更改了 nginx.conf 配置文件后,向 master 發(fā)送 SIGHUP 信號或者執(zhí)行 reload 命令, 然后 master 會用新的配置文件啟動四個新的黃色 worker 子進程,此時是四個老的綠色 worker 子進程和四個新的黃色的 worker 子進程是并存的。那么老的 worker 子進程在正常的情況下會在處理已經(jīng)建立好的連接上的請求之后關(guān)閉這個連接,哪怕這個連接是 keeplive 請求也會正常關(guān)閉。

但是異常情況,如果有一些請求出現(xiàn)問題,客戶端長時間無法處理,那么就會導致這個請求長時間停留在這個 worker 子進程當中,那么這個 worker 子進程會長時間存在,因為新的連接已經(jīng)跑在黃色的 worker 子進程中,所以影響并不會很大,唯一會影響的就是綠色的 worker 子進程會長時間存在,但也只影響已存在的連接,不會影響新的連接。

我們有什么辦法處理呢?在新版本中提供了一個新的配置 worker_shutdown_timeout,也就是說最長等待多長時間,這樣 master 進程啟動新的黃色 worker 進程之后,如果老的 worker 進程一直沒有退出,時間到了之后會強制把老的 worker 進程退出掉。

總結(jié)

本文主要講解了 Nginx 平滑升級新的配置文件的流程,在我們了解了優(yōu)雅關(guān)閉 worker 子進程和啟動新配置的 worker 子進程流程間的關(guān)系后,我們可以更好地處理罕見的異常場景。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


分享題目:探究Nginx中reload流程的原理真相-創(chuàng)新互聯(lián)
標題URL:http://weahome.cn/article/ccoehd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部