nginx没有worker进程_如何优雅地关闭worker进程?
點擊上方“武培軒”,選擇“設(shè)為星標”
技術(shù)文章第一時間送達!
之前我們講解 Nginx 命令行的時候,可以看到 Nginx 停止有兩種方式,分別是?nginx -s quit?和?nginx -s stop,其中 stop 是指立即停止 Nginx,而 quit 是指優(yōu)雅的關(guān)閉 Nginx,對應(yīng)的信號也是同樣的,還有我們之前提到的 reload 和熱升級這樣的過程中都涉及到了優(yōu)雅的停止 Nginx。
那所謂的優(yōu)雅的停止 Nginx 究竟是怎樣一個過程呢,接下來讓我一起來學(xué)習(xí)下吧。
何為優(yōu)雅的關(guān)閉?
所謂的優(yōu)雅的關(guān)閉,是針對 worker 進程而言的,因為只有 worker 進程 才會處理請求。如果我們在處理一個連接的時候,不管連接此時對于請求是怎樣一個作用,直接去關(guān)閉鏈接會導(dǎo)致用戶收到錯誤,所以優(yōu)雅地關(guān)閉就是指 Nginx 的 worker 進程 可以識別出當前連接沒有正在處理請求,這個時候再把連接進行關(guān)閉。
對于某些請求 Nginx 無法做到優(yōu)雅地關(guān)閉 worker 進程,比如當 Nginx 代理 websocket 協(xié)議的時候,在 websocket 后面進行通訊的 frame 楨里面,Nginx 是不解析他的楨的;Nginx 做 TCP 層或者 UDP 層反向代理的時候,也沒有辦法識別一個請求需要經(jīng)歷多少報文才算是結(jié)束;但是對于 HTTP 請求,Nginx 可以做到,所以優(yōu)雅地關(guān)閉主要針對的是 HTTP 請求。
接下來我們?nèi)タ匆幌聝?yōu)雅地關(guān)閉 worker 進程都有哪些流程。
優(yōu)雅的關(guān)閉流程
首先第一步會設(shè)置一個定時器,在 nginx.conf 中可以配置一個 worker_shutdown_timeout,配置完 worker_shutdown_timeout 之后,會加一個標志位,表示進入優(yōu)雅關(guān)閉流程了。
第二步會先關(guān)閉監(jiān)聽句柄,要保證所在的 worker 進程不會再去處理新的連接。
接下來會先去看連接池,因為 Nginx 為了保證對資源的利用是最大化的,經(jīng)常會保存一些空閑的連接,但是沒有斷開,這時候會首先關(guān)閉空閑連接。
第四步是可能非常耗時的一步,因為 Nginx 不是主動的立刻關(guān)閉,是通過第一步添加的標志位,然后在循環(huán)中每當發(fā)現(xiàn)一個請求處理完畢,就會把這個請求使用的連接關(guān)掉,所以在循環(huán)中等待關(guān)閉所有的時間可能會很長。當設(shè)置了 worker_shutdown_timeout 的時候,即使請求還沒處理完,當時間到了之后這些請求都會被強制關(guān)閉,也就是說優(yōu)雅地關(guān)閉只完成了一半,有一部分連接是立即停止的。
因此在以下兩個條件:當所有循環(huán)中連接被優(yōu)雅地關(guān)閉,或者達到了 worker_shutdown_timeout 時間定時器以后,worker 進程都會立即退出。
總結(jié)
這篇文章主要講解了 worker 進程優(yōu)雅關(guān)閉的一個過程,很多時候我們都會用到 Nginx 優(yōu)雅關(guān)閉這樣一個特性,那么在這一個特性失效的時候,我們需要考慮 Nginx 有沒有能力去判定一個連接此時應(yīng)當被正確的關(guān)掉;或者說如果出現(xiàn)了錯誤、有些模塊或者有些客戶端不能正常的處理請求時,Nginx 需要有一些例外的措施,比如 worker_shutdown_timeout 來保證 Nginx 老的 worker 進程可以正常的退出掉。
完
???●Nginx 了解一下?●Nginx 熱部署和日志切割,你學(xué)會了嗎?●Nginx熱升級流程,看這篇就夠了●探究 Nginx 中 reload 流程的真相●使用 Nginx 搭建靜態(tài)資源 web 服務(wù)器●Nginx 的請求處理流程,你了解嗎? 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的nginx没有worker进程_如何优雅地关闭worker进程?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python删除停用词_删除停用词
- 下一篇: 多麦克风做拾音的波束_麦克风阵列是什么