參考nginx官網:http://nginx.org/en/docs/ngx_core_module.html#worker_connections
從用戶的角度,http 1.1協議下,由於瀏覽器默認使用兩個並發連接,因此計算方法:
nginx作為http服務器的時候:
max_clients = worker_processes * worker_connections/2
nginx作為反向代理服務器的時候:
max_clients = worker_processes * worker_connections/4 (
官方wiki(頁面標記已經過時,但是網上很多文章都在引用)看到一個關於為什么除以4的解釋:
如果作為反向代理,因為瀏覽器默認會開啟2個連接到server,而且Nginx還會使用fds(file descriptor)從同一個連接池建立連接到upstream后端。則最大連接數的計算公式如下:
)
或者從一般建立連接的角度:客戶並發連接為1.
nginx作為http服務器的時候:
max_clients = worker_processes * worker_connections
nginx作為反向代理服務器的時候:
max_clients = worker_processes * worker_connections/2
nginx做反向代理時,和客戶端之間保持一個連接,和后端服務器保持一個連接。
但是怎樣合理的設置worker_processes與worker_connections這兩個參數?
worker_processes :
worker角色的進程個數(nginx啟動后有多少個worker處理http請求。master不處理請求,而是根據相應配置文件信息管理worker進程. master進程主要負責對外攬活(即接收客戶端的請求),並將活兒合理的分配給多個worker,每個worker進程主要負責干活(處理請求))。
最理想的worker_processes值取決於很多因素,包含但不限於CPU的核數,存儲數據的硬盤驅動器個數(跟這個有什么關系?難道和cpu一樣,存在跨區域讀取數據問題),以及負載模式(?這個是什么?)當其中任何一個因素不確定的時候,將其設置為cpu核數或許是一個比較好的初始值,“自動”也基本是如此確認一個參數值的。
“自動”這個參數值是從nginx 1.3.8和nginx 1.2.5 開始進行支持的,自動參數可以自動檢測 cpu cores 並設置 worker_processes 參數 。
在網上也看到以下建議:
nginx doesn't benefit from more than one worker per CPU.
一個cpu配置多於一個worker數,對nginx而言沒有任何益處。
If Nginx is doing CPU-intensive work such as SSL or gzipping and you have 2 or more CPUs/cores, then you may set worker_processes to be equal to the number of CPUs or cores.
如果nginx處理的是cpu密集型(比較耗費cpu的)的操作,建議將此值設置為cpu個數或cpu的核數。
cpu相關信息查看:
邏輯CPU個數:
# cat /proc/cpuinfo | grep "processor" | wc -l
物理CPU個數:
# cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
每個物理CPU中Core的個數:
# cat /proc/cpuinfo | grep "cpu cores" | wc -l
worker_connections:
官方解釋如下,個人認為是每一個worker進程能並發處理(發起)的最大連接數(包含所有連接數)。
不能超過最大文件打開數:在linux終端中輸入ulimit -a進行查看
worker_rlimit_nofile
- 英文原文:
Syntax: worker_rlimit_nofile number; Default: — Context: main Changes the limit on the maximum number of open files (RLIMIT_NOFILE) for worker processes. Used to increase the limit without restarting the main process.
-
中文翻譯:
為nginx工作進程改變打開最多文件描述符數目的限制。用來在不重啟主進程的情況下增加限制。
例如:
worker_rlimit_nofile 204800;
理論上這個值是最多打開文件數(ulimit -n)與nginx工作進程相關
參考:
http://www.jb51.net/LINUXjishu/164573.html 最大文件打開數相關描述
https://blog.csdn.net/sole_cc/article/details/52433353