Nginx處理web請求機制

Worker搶占機制

master監(jiān)聽80端口者铜,多個worker進程fork master進程腔丧。client發(fā)送請求時构蹬,worker會爭搶accept_mutex鎖,
然后worker才會處理請求悔据。

events { 
  accept_mutex off; 
} 

讓我們看看accept_mutex的意義:當一個新連接到達時庄敛,如果激活了accept_mutex,那么多個Worker將以串行方式來處理科汗,其中有一個Worker會被喚醒藻烤,其他的Worker繼續(xù)保持休眠狀態(tài);如果沒有激活accept_mutex头滔,那么所有的Worker都會被喚醒怖亭,不過只有一個Worker能獲取新連接,其它的Worker會重新進入休眠狀態(tài)坤检,這就是「[驚群問題](http://en.wikipedia.org/wiki/Thundering_herd_problem)」兴猩。

Nginx缺省激活了accept_mutex,也就是說不會有驚群問題早歇,但真的有那么嚴重么倾芝?實際上Nginx作者Igor Sysoev曾經(jīng)給過相關(guān)的[解釋](http://forum.nginx.org/read.php?2,1641,1686#msg-1686):

> OS may wake all processes waiting on accept() and select(), this is called thundering herd problem. This is a problem if you have a lot of workers as in Apache (hundreds and more), but this insensible if you have just several workers as nginx usually has. Therefore turning accept_mutex off is as scheduling incoming connection by OS via select/kqueue/epoll/etc (but not accept()).

簡單點說:Apache動輒就會啟動成百上千的進程,如果發(fā)生驚群問題的話箭跳,影響相對較大晨另;但是對Nginx而言,一般來說谱姓,[worker_processes](http://wiki.nginx.org/CoreModule#worker_processes)會設(shè)置成CPU個數(shù)借尿,所以最多也就幾十個,即便發(fā)生驚群問題的話屉来,影響相對也較小路翻。

另:高版本的Linux中,accept不存在驚群問題茄靠,不過epoll_wait等操作還有茂契。

…

假設(shè)你養(yǎng)了一百只小雞,現(xiàn)在你有一粒糧食嘹黔,那么有兩種喂食方法:

*   你把這粒糧食直接扔到小雞中間账嚎,一百只小雞一起上來搶莫瞬,最終只有一只小雞能得手,其它九十九只小雞只能鎩羽而歸疼邀。這就相當于關(guān)閉了accept_mutex喂江。
*   你主動抓一只小雞過來,把這粒糧食塞到它嘴里旁振,其它九十九只小雞對此渾然不知获询,該睡覺睡覺涨岁。這就相當于激活了accept_mutex。

可以看到此場景下吉嚣,激活accept_mutex相對更好一些梢薪,讓我們修改一下問題的場景,我不再只有一粒糧食尝哆,而是一盆糧食秉撇,怎么辦?

此時如果仍然采用主動抓小雞過來塞糧食的做法就太低效了秋泄,一盆糧食不知何年何月才能喂完琐馆,大家可以設(shè)想一下幾十只小雞排隊等著喂食時那種翹首以盼的情景。此時更好的方法是把這盆糧食直接撒到小雞中間恒序,讓它們自己去搶瘦麸,雖然這可能會造成一定程度的混亂,但是整體的效率無疑大大增強了歧胁。

…

Nginx缺省激活了accept_mutex滋饲,是一種保守的選擇。如果關(guān)閉了它喊巍,可能會引起一定程度的驚群問題了赌,表現(xiàn)為上下文切換增多(sar -w)或者負載上升,但是如果你的網(wǎng)站訪問量比較大玄糟,為了系統(tǒng)的吞吐量勿她,我還是建議大家關(guān)閉它。

Nginx事件處理

client1連接worker1阻塞時阵翎,worker1會去處理client2逢并。(epoll模型)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市郭卫,隨后出現(xiàn)的幾起案子砍聊,更是在濱河造成了極大的恐慌,老刑警劉巖贰军,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玻蝌,死亡現(xiàn)場離奇詭異,居然都是意外死亡词疼,警方通過查閱死者的電腦和手機俯树,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贰盗,“玉大人许饿,你說我怎么就攤上這事《嬗” “怎么了陋率?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵球化,是天一觀的道長。 經(jīng)常有香客問我瓦糟,道長筒愚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任菩浙,我火速辦了婚禮锨能,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘芍耘。我一直安慰自己址遇,他們只是感情好,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布斋竞。 她就那樣靜靜地躺著倔约,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坝初。 梳的紋絲不亂的頭發(fā)上浸剩,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音鳄袍,去河邊找鬼绢要。 笑死,一個胖子當著我的面吹牛拗小,可吹牛的內(nèi)容都是我干的重罪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼哀九,長吁一口氣:“原來是場噩夢啊……” “哼剿配!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起阅束,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤呼胚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后息裸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝇更,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年呼盆,在試婚紗的時候發(fā)現(xiàn)自己被綠了年扩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡宿亡,死狀恐怖常遂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挽荠,我是刑警寧澤克胳,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站圈匆,受9級特大地震影響漠另,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜跃赚,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一笆搓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纬傲,春花似錦满败、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至汁雷,卻和暖如春净嘀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侠讯。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工挖藏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人厢漩。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓膜眠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親溜嗜。 傳聞我的和親對象是個殘疾皇子柴底,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355