1. 程式人生 > 實用技巧 >nginx學習筆記:nginx底層機制

nginx學習筆記:nginx底層機制

1. master 和 worker

  • master程序
    主要是管理worker程序,⽐如:
    • 接收外界訊號向各worker程序傳送訊號(./nginx -s reload)
    • 監控worker程序的運⾏狀態,當worker程序異常退出後Master程序會⾃動重新啟動新的worker程序等
  • worker程序
    worker程序具體處理⽹絡請求。多個worker程序之間是對等的,他們同等競爭來⾃客戶端的請求,各程序互相之間是獨⽴的。⼀個請求,只可能在⼀個worker程序中處理,⼀個worker程序,不可能處理其它程序的請求。worker程序的個數是可以設定的,⼀般設定與機器cpu核數⼀致。

    ./nginx -s reload
    來說明nginx訊號處理這部分
    1)master程序對配置⽂件進⾏語法檢查
    2)嘗試配置(⽐如修改了監聽端⼝,那就嘗試分配新的監聽端⼝)
    3)嘗試成功則使⽤新的配置,新建worker程序
    4)新建成功,給舊的worker程序傳送關閉訊息
    5)舊的worker程序收到訊號會繼續服務,直到把當前程序接收到的請求處理完畢後關閉
    所以reload之後worker程序pid是發⽣了變化的
    在這裡插入圖片描述

2. woker 是如何工作的

在這裡插入圖片描述
worker程序處理請求部分的說明
例如:我們監聽9000端⼝,⼀個請求到來時,如果有多個worker程序,那麼每個worker程序都有可能處理這個連結。

  • master程序建立之後,會建⽴好需要監聽的的socket,然後從master程序再fork出多個worker程序

    。所以,所有worker程序的監聽描述符(listenfd)在新連線到來時都變得可讀。

  • nginx使⽤互斥鎖來保證只有⼀個worker程序能夠處理請求,拿到互斥鎖的那個程序註冊listenfd讀事件,在讀事件⾥調⽤accept接受該連線,然後解析、處理、返回客戶端

3. nginx多程序模型好處

  • 每個worker程序都是獨⽴的,不需要加鎖,節省開銷
  • 每個worker程序都是獨⽴的,互不影響,⼀個異常結束,其他的照樣能提供服務
  • 多程序模型為reload熱部署機制提供了⽀撐

4. 設定多少個 woker 合適

worker 數和伺服器的 cpu 數相等是最為適宜

5. 連線數 worker_connection

第一個:傳送請求,佔用了 woker 的幾個連線數
答案:2 或者 4 個

第二個:nginx 有一個 master,有四個 woker,每個 woker 支援最大的連線數 1024,支援的
最大併發數是多少?

  1. 普通的靜態訪問最大併發數是:worker_connections * worker_processes/2
  2. 如果是 HTTP 作 為反向代理來說,最大併發數量應該是worker_connections * worker_processes/4