nginx沒有worker進程_如何優雅地關閉worker進程?

61156eb5b864e7d3b7d49ba22a15e312.gif

點擊上方“武培軒”,選擇“設為星標”

技術文章第一時間送達!

之前我們講解 Nginx 命令行的時候,可以看到 Nginx 停止有兩種方式,分別是?nginx -s quit?和?nginx -s stop,其中 stop 是指立即停止 Nginx,而 quit 是指優雅的關閉 Nginx,對應的信號也是同樣的,還有我們之前提到的 reload 和熱升級這樣的過程中都涉及到了優雅的停止 Nginx。

那所謂的優雅的停止 Nginx 究竟是怎樣一個過程呢,接下來讓我一起來學習下吧。

何為優雅的關閉?

所謂的優雅的關閉,是針對 worker 進程而言的,因為只有 worker 進程 才會處理請求。如果我們在處理一個連接的時候,不管連接此時對于請求是怎樣一個作用,直接去關閉鏈接會導致用戶收到錯誤,所以優雅地關閉就是指 Nginx 的 worker 進程 可以識別出當前連接沒有正在處理請求,這個時候再把連接進行關閉。

對于某些請求 Nginx 無法做到優雅地關閉 worker 進程,比如當 Nginx 代理 websocket 協議的時候,在 websocket 后面進行通訊的 frame 楨里面,Nginx 是不解析他的楨的;Nginx 做 TCP 層或者 UDP 層反向代理的時候,也沒有辦法識別一個請求需要經歷多少報文才算是結束;但是對于 HTTP 請求,Nginx 可以做到,所以優雅地關閉主要針對的是 HTTP 請求。

接下來我們去看一下優雅地關閉 worker 進程都有哪些流程。

優雅的關閉流程

446e948a7f3c16bacde1ab7967f7ab01.png

首先第一步會設置一個定時器,在 nginx.conf 中可以配置一個 worker_shutdown_timeout,配置完 worker_shutdown_timeout 之后,會加一個標志位,表示進入優雅關閉流程了。

第二步會先關閉監聽句柄,要保證所在的 worker 進程不會再去處理新的連接。

接下來會先去看連接池,因為 Nginx 為了保證對資源的利用是最大化的,經常會保存一些空閑的連接,但是沒有斷開,這時候會首先關閉空閑連接。

第四步是可能非常耗時的一步,因為 Nginx 不是主動的立刻關閉,是通過第一步添加的標志位,然后在循環中每當發現一個請求處理完畢,就會把這個請求使用的連接關掉,所以在循環中等待關閉所有的時間可能會很長。當設置了 worker_shutdown_timeout 的時候,即使請求還沒處理完,當時間到了之后這些請求都會被強制關閉,也就是說優雅地關閉只完成了一半,有一部分連接是立即停止的。

因此在以下兩個條件:當所有循環中連接被優雅地關閉,或者達到了 worker_shutdown_timeout 時間定時器以后,worker 進程都會立即退出。

總結

這篇文章主要講解了 worker 進程優雅關閉的一個過程,很多時候我們都會用到 Nginx 優雅關閉這樣一個特性,那么在這一個特性失效的時候,我們需要考慮 Nginx 有沒有能力去判定一個連接此時應當被正確的關掉;或者說如果出現了錯誤、有些模塊或者有些客戶端不能正常的處理請求時,Nginx 需要有一些例外的措施,比如 worker_shutdown_timeout 來保證 Nginx 老的 worker 進程可以正常的退出掉。

83c26fa45379bfdc0bf4a8b05b28e638.gif???●Nginx 了解一下?●Nginx 熱部署和日志切割,你學會了嗎?●Nginx熱升級流程,看這篇就夠了●探究 Nginx 中 reload 流程的真相●使用 Nginx 搭建靜態資源 web 服務器●Nginx 的請求處理流程,你了解嗎?

5caec7e8af7c9b0e1780f946df0445dd.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258385.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258385.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258385.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[Python3]Python面向對象的程序設計

[Python3]Python面向對象的程序設計 一、面向對象的程序設計的由來 1.第一階段:面向機器,1940年以前 最早的程序設計都是采用機器語言來編寫的,直接使用二進制碼來表示機器能夠識別和執行的指令和數據。 簡單來說,就是直接編寫 0 和 1 的序列來代表程序語…

RC電路輸出波形的時域與頻域分析

RC一階電路為例進行時域和頻域分析,激勵Us為方波,以Uc作為輸出的波形相當于積分電路的輸出曲線,以Ur作為輸出的波形相當于微分電路的輸出曲線。電容對輸入電壓具有平滑作用,平滑程度與時間常數有關,衰減程度與帶寬設計…

JQuery之編寫彈窗

演示地址&#xff1a;http://sandbox.runjs.cn/show/irefekbs <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style>*{ margin: 0; padding: 0;}#login { z-index:9999…

[ext/iconv/iconv.lo] Error 1

辦法1&#xff1a; wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz tar -zxvf libiconv-1.13.1.tar.gz cd libiconv- 1.13.1 ./configure make make install 辦法2&#xff1a; wget http://down.wdlinux.cn/in/iconv_ins.sh sh iconv_ins.sh轉載于:https:/…

多麥克風做拾音的波束_麥克風陣列是什么 有哪些關鍵技術?

麥克風陣列是什么 有哪些關鍵技術&#xff1f;亞馬遜Echo和谷歌Home爭奇斗艷&#xff0c;除了云端服務&#xff0c;他們在硬件上到底有哪些差異&#xff1f;我們先將Echo和Home兩款音箱拆開來看&#xff0c;區別最大的還是麥克風陣列技術。Amazon Echo采用的是環形61麥克風陣列…

如何用AD20打開ddb文件

用AD20直接打開ddb文件會報錯&#xff0c;在AD20中使用導入向導才是ddb文件的正確打開方式。 1.用AD20直接打開ddb文件的報錯提示 2.使用導入向導打開ddb文件 除了以下兩處關鍵設置的地方&#xff0c;一路next就行。

Codeforces Round #419 (Div. 2)

1.題目A&#xff1a;Karen and Morning 題意&#xff1a; 給出hh:mm格式的時間&#xff0c;問至少經過多少分鐘后&#xff0c;該時刻為回文字符串&#xff1f; 思路&#xff1a; 簡單模擬&#xff0c;從當前時刻開始&#xff0c;如果hh的回文rh等于mm則停止累計。否則&#xff…

Java NIO 系列教程

Java NIO&#xff08;New IO&#xff09;是從Java 1.4版本開始引入的一個新的IO API&#xff0c;可以替代標準的Java IO API。本系列教程將有助于你學習和理解Java NIO。感謝并發編程網的翻譯和投遞。 &#xff08;關注ITeye官微&#xff0c;隨時隨地查看最新開發資訊、技術文章…

使用語句修改數據表結構

查詢表信息&#xff1a; sp_help dbo.T_User; 修改columnName 字段為空 alter table dbo.T_User alter column columnName datetime null; 修改columnName 默認值 ALTER TABLE dbo.T_User ADD CONSTRAINT [DF_T_User_columnName ] DEFAULT 0 FOR [columnName ];轉載于:https://…

變換上三角矩陣_關于馬爾可夫矩陣的一些個人研究成果、思考過程及相關解釋...

在幾個月以前&#xff0c;曾經有一位知乎好友邀請我回答一個問題&#xff1a;“如何證明馬爾可夫矩陣至少存在一個所有分量均不小于零的特征向量。”當時我思考了大概半個小時&#xff0c;給出了嚴謹的證明。事后由該問題引發我至少三度思考&#xff0c;對于此問題&#xff0c;…

Multisim14仿真入門筆記

本文是B站北京郵電大學鄧剛老師《Multisim仿真入門》的學習筆記&#xff0c;視頻地址&#xff1a;【電路仿真】Multisim仿真入門&#xff08;北京郵電大學 鄧剛主講&#xff09;_嗶哩嗶哩_bilibili。 1.Multisim簡介 Multisim14是一種專門用于電路仿真和設計的軟件之一&#x…

你研究過單例么?這樣寫單例效率最高.

首先,小湯我在這里,要表示一下歉意,本來是想要每天寫一篇Swift的學習小tip的,無奈近期手頭的money花差的差點兒相同了,僅僅能迫不得已,出門找工作去了,沒能履行承諾之處還請大家見諒. 那么,廢話不多說了,開始我們今天的主題: 單例 ! 單例介紹: 說到單例,大家應該都不陌生,在傳說…

office365在win7上使用訂閱+win7在線升級win10就用它(親測有效)

前言&#xff1a; 作為office365的重度使用用戶&#xff0c;最近兩天訂閱到期&#xff0c;續訂之后一直顯示無法驗證此訂閱&#xff08;僅查看&#xff09;&#xff0c;office365未經授權&#xff0c;大多數功能已停用&#xff0c;狂暈&#xff01;&#xff01;&#xff01; 在…

HDU 4414 Finding crosses(搜索)

題目鏈接&#xff1a;HDU 4414 Finding crosses 【題目大意】 給你一張n*n的圖&#xff0c;由o #這兩個元素組成&#xff0c;讓我們找其中有多少十字架。 十字架由#構成 十字架的縱向長度等于橫向長度 &#xff0c; 且這個長度要為大于等于3的奇數。 構成十字架的#周圍不能有多…

mongodb檢查點_Mongodb 日志原理和操作

日志原理&#xff1a;WiredTiger使用檢查點在磁盤上提供一致性數據視圖&#xff0c;并允許MongoDB從上一個檢查點恢復。 但是&#xff0c;如果MongoDB在檢查點之間意外退出&#xff0c;則需要使用日志記錄來恢復上次檢查點之后發生的信息。通過日志記錄&#xff0c;恢復過程如下…

UILabel 根據text的內容來調整大小

有時候&#xff0c;在UILabel的text過長的時候&#xff0c;我們需要讓label進行自適應大小&#xff0c;之前我們必須要獲得這個UILabel的size&#xff0c;這便是根據text的內容和性質&#xff08;字體&#xff0c;行間距等決定的&#xff09;。 在ios7中&#xff0c;使用boundi…

遞歸和分治思想及其應用

目錄 遞歸和分治思想一些實例逆序輸出字符串查找數組元祖是否存在漢諾塔問題八皇后問題更多&#xff1a;遞歸和分治思想 如果可以使用迭代&#xff0c;盡量別使用遞歸。由編譯原理可以知道&#xff0c;每次自調用的時候&#xff0c;計算機都需要保存在調用&#xff0c;浪費時間…

AM+PM+FM基本調制原理及相關理論

總論&#xff1a; 調制信號&#xff1a; 模擬信號m(t)&#xff0c;可以是正弦波信號、方波信號等任意信號&#xff0c;又稱基帶信號 載波信號&#xff1a;一般為正弦波信號 已調信號&#xff1a; 幅度調制AM---A(t)隨m(t)成比例變化----線性調制 相位調制PM---隨m(t)成比…

unix網絡編程 的環境配置

<unix網絡編程> 的環境配置 首先在網上下載UNP的庫文件&#xff0c;然后就可以安裝學了。我的系統環境&#xff1a; 2.6.32-131.0.15.el6.i686 #1 SMP Sat Nov 12 17:30:50 CST 2011 i686 i686 i386 GNU/Linux LSB Version: :base-4.0-ia32:base-4.0-noarch:core-4.0-…

win32 api 文件操作!

CreateFile打開文件要對文件進行讀寫等操作&#xff0c;首先必須獲得文件句柄&#xff0c;通過該函數可以獲得文件句柄&#xff0c;該函數是通向文件世界的大門。ReadFile從文件中讀取字節信息。在打開文件獲得了文件句柄之后&#xff0c;則可以通過該函數讀取數據。WriteFile向…