更多知識,請移步我的小破站:http://hellofriend.top
原理
Nginx 採用的是多進程(單線程) & 多路IO複用模型。使用了 I/O 多路複用技術的 Nginx,就成了 “併發事件驅動” 的服務器。
- Nginx 在啓動後,會有一個 master 進程和多個相互獨立的 worker 進程。
- 接收來自外界的信號,向各worker進程發送信號,每個進程都有可能來處理這個連接。
- master 進程能監控 worker 進程的運行狀態,當 worker 進程退出後(異常情況下),會自動啓動新的 worker 進程。也就是說,Worker的工作方式是爭搶。
一個master和多個worker的工作方式的好處
- 可以使用
nginx -s reload
熱部署,利用 Nginx 進行熱部署的操作。 - 每個 worker 是獨立的進程,其中有一個worker出現問題,其他的worker都能正常運行,繼續進行爭搶的過程,完成服務器的響應,不會造成服務的中斷。
設置多少個worker合適?
注意 worker 進程數,一般會設置成機器 cpu 核數。因爲更多的worker 數,只會導致進程相互競爭 cpu,從而帶來不必要的上下文切換。
使用多進程模式,不僅能提高併發率,而且進程之間相互獨立,一個 worker 進程掛了不會影響到其他 worker 進程。
work_connection(worker的連接數)
Q:當發送一個請求的時候,佔用worker的多少個連接數?
A:2個(訪問靜態資源,一來一回)或者4個(訪問動態資源,一來一回+和 tomcat 的一來一回)。
最大併發量
Q:nginx有1個master,有4個worker,每個worker的最大連接數爲1024,那麼Nginx支持的最大併發爲多少?
A:要分情況考慮:
訪問靜態資源: work_connections * worker_processes /2
訪問動態資源::work_connections * worker_processes /4