nginx最大并發(fā)連接數(shù)的思考:worker_processes、worker_connections、worker_rlimit_nofile三個關(guān)鍵配置項
參考nginx官網(wǎng):http://nginx.org/en/docs/ngx_core_module.html#worker_connections
從用戶的角度,http 1.1協(xié)議下,由于瀏覽器默認(rèn)使用兩個并發(fā)連接,因此計算方法:
nginx作為http服務(wù)器的時候:
max_clients = worker_processes * worker_connections/2
nginx作為反向代理服務(wù)器的時候:
max_clients = worker_processes * worker_connections/4 (
官方wiki(頁面標(biāo)記已經(jīng)過時,但是網(wǎng)上很多文章都在引用)看到一個關(guān)于為什么除以4的解釋:
wKiom1OJ8DSAgxkKAACuEkIa_ng216.jpg
如果作為反向代理,因為瀏覽器默認(rèn)會開啟2個連接到server,而且Nginx還會使用fds(file descriptor)從同一個連接池建立連接到upstream后端。則最大連接數(shù)的計算公式如下:
)
或者從一般建立連接的角度:客戶并發(fā)連接為1.
nginx作為http服務(wù)器的時候:
max_clients = worker_processes * worker_connections
nginx作為反向代理服務(wù)器的時候:
max_clients = worker_processes * worker_connections/2
nginx做反向代理時,和客戶端之間保持一個連接,和后端服務(wù)器保持一個連接。
但是怎樣合理的設(shè)置worker_processes與worker_connections這兩個參數(shù)?
worker_processes :
worker角色的進(jìn)程個數(shù)(nginx啟動后有多少個worker處理http請求。master不處理請求,而是根據(jù)相應(yīng)配置文件信息管理worker進(jìn)程. master進(jìn)程主要負(fù)責(zé)對外攬活(即接收客戶端的請求),并將活兒合理的分配給多個worker,每個worker進(jìn)程主要負(fù)責(zé)干活(處理請求))。
最理想的worker_processes值取決于很多因素,包含但不限于CPU的核數(shù),存儲數(shù)據(jù)的硬盤驅(qū)動器個數(shù)(跟這個有什么關(guān)系?難道和cpu一樣,存在跨區(qū)域讀取數(shù)據(jù)問題),以及負(fù)載模式(?這個是什么?)當(dāng)其中任何一個因素不確定的時候,將其設(shè)置為cpu核數(shù)或許是一個比較好的初始值,“自動”也基本是如此確認(rèn)一個參數(shù)值的。
“自動”這個參數(shù)值是從nginx 1.3.8和nginx 1.2.5 開始進(jìn)行支持的,自動參數(shù)可以自動檢測 cpu cores 并設(shè)置 worker_processes 參數(shù) 。
在網(wǎng)上也看到以下建議:
nginx doesn't benefit from more than one worker per CPU.
一個cpu配置多于一個worker數(shù),對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密集型(比較耗費(fèi)cpu的)的操作,建議將此值設(shè)置為cpu個數(shù)或cpu的核數(shù)。
cpu相關(guān)信息查看:
邏輯CPU個數(shù):
# cat /proc/cpuinfo | grep "processor" | wc -l
物理CPU個數(shù):
# cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
每個物理CPU中Core的個數(shù):
# cat /proc/cpuinfo | grep "cpu cores" | wc -l
worker_connections:
官方解釋如下,個人認(rèn)為是每一個worker進(jìn)程能并發(fā)處理(發(fā)起)的最大連接數(shù)(包含所有連接數(shù))。
不能超過最大文件打開數(shù):在linux終端中輸入ulimit -a進(jìn)行查看
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工作進(jìn)程改變打開最多文件描述符數(shù)目的限制。用來在不重啟主進(jìn)程的情況下增加限制。
例如:
worker_rlimit_nofile 204800;
理論上這個值是最多打開文件數(shù)(ulimit -n)與nginx工作進(jìn)程相關(guān)
參考:
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。