nginx學習筆記:nginx底層機制
阿新 • • 發佈:2020-10-09
1. master 和 worker
- master程序
主要是管理worker程序
,⽐如:接收外界訊號
向各worker程序傳送訊號(./nginx -s reload)監控worker程序的運⾏狀態
,當worker程序異常退出後Master程序會⾃動重新啟動新的worker程序等
- worker程序
worker程序具體處理⽹絡請求。多個worker程序之間是對等的,他們同等競爭來⾃客戶端的請求,各程序互相之間是獨⽴的。⼀個請求,只可能在⼀個worker程序中處理,⼀個worker程序,不可能處理其它程序的請求。worker程序的個數是可以設定的,⼀般設定與機器cpu核數⼀致。
以./nginx -s reload
1)master程序對配置⽂件進⾏語法檢查
2)嘗試配置(⽐如修改了監聽端⼝,那就嘗試分配新的監聽端⼝)
3)嘗試成功則使⽤新的配置,新建worker程序
4)新建成功,給舊的worker程序傳送關閉訊息
5)舊的worker程序收到訊號會繼續服務,直到把當前程序接收到的請求處理完畢後關閉
所以reload之後worker程序pid是發⽣了變化的
2. woker 是如何工作的
worker程序處理請求部分的說明
例如
:我們監聽9000端⼝,⼀個請求到來時,如果有多個worker程序,那麼每個worker程序都有可能處理這個連結。
-
master程序建立之後,會建⽴好需要監聽的的socket,然後從master程序再
fork出多個worker程序
-
nginx使⽤互斥鎖來保證只有⼀個worker程序能夠處理請求
,拿到互斥鎖的那個程序註冊listenfd讀事件,在讀事件⾥調⽤accept接受該連線,然後解析、處理、返回客戶端
3. nginx多程序模型好處
- 每個worker程序都是獨⽴的,不需要加鎖,節省開銷
- 每個worker程序都是獨⽴的,互不影響,⼀個異常結束,其他的照樣能提供服務
- 多程序模型為reload熱部署機制提供了⽀撐
4. 設定多少個 woker 合適
worker 數和伺服器的 cpu 數相等
是最為適宜
5. 連線數 worker_connection
第一個
:傳送請求,佔用了 woker 的幾個連線數
答案:2 或者 4 個
第二個
:nginx 有一個 master,有四個 woker,每個 woker 支援最大的連線數 1024,支援的
最大併發數是多少?
普通的靜態訪問
最大併發數是:worker_connections * worker_processes/2
- 如果是
HTTP 作 為反向代理
來說,最大併發數量應該是worker_connections * worker_processes/4
。