一,優化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