日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx没有worker进程_如何优雅地关闭worker进程?

發(fā)布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx没有worker进程_如何优雅地关闭worker进程? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

點擊上方“武培軒”,選擇“設(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。