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