worker_processes:
表示開啟nginx的worker進(jìn)程的個(gè)數(shù),nginx啟動(dòng)會(huì)開兩種進(jìn)程改抡,master進(jìn)程用來管理調(diào)度矢炼,workwr進(jìn)程用來處理請(qǐng)求;
上面兩種設(shè)置方法如下:
方法一:worker_processes auto;
表示設(shè)置服務(wù)器cpu核數(shù)匹配開啟nginx開啟的worker進(jìn)程數(shù)阿纤。
查看cpu核數(shù)命令:cat /proc/cpuinfo
方法二:nginx設(shè)置cpu親和力
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
00000001表示啟用第一個(gè)cpu內(nèi)核句灌,00000010表示啟用第二個(gè)cpu內(nèi)核,以此類推
這種設(shè)置方法更高效欠拾,因?qū)⒚總€(gè)cpu核提供給固定的worker進(jìn)程服務(wù)胰锌,減少cpu上下文切換代理的資源浪費(fèi)。
如果服務(wù)器cpu有限
比如:2核cpu清蚀,開啟2個(gè)進(jìn)程匕荸,設(shè)置如下:
worker_processes? 2;
worker_cpu_affinity 01 10;
比如:4核cpu,開啟4個(gè)進(jìn)程枷邪,設(shè)置如下:
worker_processes? ? ?4;
worker_cpu_affinity? 0001 0010 0100 1000
8核cpu榛搔,worker_processes=8
1個(gè)worker進(jìn)程能夠最大打開的文件數(shù)(進(jìn)程數(shù))=65535(參考 worker_rlimit_nofile ----> linux ulimit - n)
最大的客戶端連接數(shù):? max_clients = (多少個(gè)工作進(jìn)程數(shù)) worker_processes * (1個(gè)工作線程的處理線程數(shù)) worker_connections? ? ?8 * 65535
nginx作為http服務(wù)器:
請(qǐng)求模型? ?client<------> nginx
max_clients = worker_processes * worker_connections? ?/? ? 2
nginx作為反向代理服務(wù)器的時(shí)候:
請(qǐng)求模型 client<-----> nginx <----> web server
max_clients = worker_processes * worker_connections / 4
為什么作為http服務(wù)器時(shí)除以2:
該公式基于http 1.1協(xié)議诺凡,一次請(qǐng)求大多數(shù)瀏覽器發(fā)送兩次連接,并不是request和response響應(yīng)占用兩個(gè)線程践惑,實(shí)際情況腹泌,請(qǐng)求時(shí)雙向的,連接是沒有方向的尔觉。
為什么作為反向代理服務(wù)器時(shí)除以4:?
因nginx作為反向代理凉袱,客戶端和nginx建立連接,nginx和后端服務(wù)器也要建立連接侦铜。
單位時(shí)間(keepalive_timeout)內(nèi)nginx最大并發(fā)量c
c = worker_processes * worker_connextions / 2 = 8 * 65535 /2
每秒的并發(fā)量cs
cs = worker_processes * worker_connections / (2 * 65)