nginx最大并发连接数的思考:worker_processes、worker_connections、worker_rlimit_nofile
參考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
來源:https://www.cnblogs.com/nulige/p/9369837.html
總結
以上是生活随笔為你收集整理的nginx最大并发连接数的思考:worker_processes、worker_connections、worker_rlimit_nofile的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人死了会投胎转世换父母吗(人死了会投胎转
- 下一篇: nginx优化worker进程最大打开文