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的解釋:

 

 wKiom1OJ8DSAgxkKAACuEkIa_ng216.jpg

   

 如果作為反向代理,因為瀏覽器默認會開啟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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM