天天看點

nginx優化:worker_processes/worker_connections/worker_rlimit_nofile

一,優化nginx的worker程序數

1,worker_processes應設定為多少?

worker_processes  4;      

如何設定這個值:

worker_processes預設值是1,一般要設定為cpu的核心數量或核心數量x2

注意:是核心的數量,不是cpu的數量,一顆cpu可能有多個核心

2,如何檢視核心的數量:用lscpu指令

[root@blog conf]$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  2
Core(s) per socket:  2
...      

CPU(s):              一欄标明是4個core

3,如何檢視核心的數量:執行top指令檢視

執行top指令後,按1打開cpu的核心清單

[root@blog conf]$ top
top - 18:45:32 up 105 days,  8:41,  3 users,  load average: 0.00, 0.00, 0.00
Tasks: 153 total,   1 running, 145 sleeping,   7 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  15355.3 total,    838.1 free,   1154.0 used,  13363.1 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.  13873.0 avail Mem 
...      

 4,配置worker_processes後的效果

應該有四個worker程序:

我們用ps指令檢視:

[root@blog ~]# ps auxfww | grep nginx
root     29616  0.0  0.0  50412  3292 ?        Ss   Apr24   0:00 nginx: master process /usr/local/openresty/nginx/sbin/nginx
nginx    29617  0.0  0.0  81896  5968 ?        S    Apr24   0:00  \_ nginx: worker process
nginx    29618  0.0  0.0  81896  5996 ?        S    Apr24   0:00  \_ nginx: worker process
nginx    29619  0.0  0.0  81896  5968 ?        S    Apr24   0:00  \_ nginx: worker process
nginx    29620  0.0  0.0  81896  7164 ?        S    Apr24   0:00  \_ nginx: worker process      

說明:可以看到有4個worker process

5, master process與worker process不同,

master process負責綁定端口、排程程序等,不負責業務的處理

而worker process是業務程序,負責業務的處理

說明:劉宏締的架構森林是一個專注架構的部落格,位址:https://www.cnblogs.com/architectforest

         對應的源碼可以通路這裡擷取: https://github.com/liuhongdi/

說明:作者:劉宏締 郵箱: [email protected]

二,優化每個worker程序的連接配接數

1, worker_connections的作用?

worker_connections 20480      
worker_connections是每個worker程序允許的最多連接配接數,      

每台nginx 伺服器的最大連接配接數為:worker_processes*worker_connections

例子:

events {
    worker_connections  16383;
}      

2,如何設定worker_connections的值?

系統的最大打開檔案數>= worker_connections*worker_process

3,如何檢視系統的最大打開檔案數:

[root@blog ~]# ulimit -n
65535      

如果worker_process = 4,

則 worker_connections應該小于等于16383

考慮到程序間配置設定不平衡,可以設定到 20480

說明:ulimit -n給出的系統的使用者最大打開檔案數可以調整,

參見這一篇:

https://www.cnblogs.com/architectforest/p/12794818.html      

三,配置Nginx worker程序最大打開檔案數

worker_rlimit_nofile 65535;      

這個指令是指一個nginx worker程序打開的最多檔案描述符數目,

理論值應該是最多打開檔案數(ulimit -n)與nginx程序數相除,

因為nginx配置設定請求未必很均勻,是以最好與ulimit -n的值保持一緻

說明:

如果worker_rlimit_nofile的值小于worker_connections的值,會報如下錯誤:

worker_connections exceed open file resource limit: xxx

2020/04/26 14:04:40 [warn] 1402#1402: 2048 worker_connections exceed open file resource limit: 1024      

四,檢視nginx的版本 

[root@blog ~]# /usr/local/openresty/nginx/sbin/nginx -v
nginx version: openresty/1.15.8.2      

繼續閱讀