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/

說明:作者:劉宏締 郵箱: 371125307@qq.com

 

二,優化每個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

 


免責聲明!

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



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