nginx的master進(jìn)程和worker進(jìn)程用法解讀
nginx的master進(jìn)程和worker進(jìn)程
當(dāng)你啟動(dòng)nginx以后,使用ps命令查看nginx進(jìn)程, 會(huì)發(fā)現(xiàn)nginx進(jìn)程不只有一個(gè),默認(rèn)情況下, 你會(huì)看到至少兩個(gè)nginx進(jìn)程,如下:
[root@server1 ~]# ps -ef |grep nginx |grep -v grep root 2120 1 0 10:03 ? 00:00:00 nginx: master process nginx nobody 2173 2120 0 10:30 ? 00:00:00 nginx: worker process [root@server1 ~]#
編譯安裝nginx后,默認(rèn)情況下worker進(jìn)程是以"nobody"用戶的身份運(yùn)行的,如果我們想要指定worker進(jìn)程的運(yùn)行用戶,則可以使用"user"指令,比如,
指定worker進(jìn)程以nginx用戶的身份運(yùn)行
[root@server1 ~]# useradd -u 900 nginx [root@server1 ~]# id nginx uid=900(nginx) gid=1001(nginx) groups=1001(nginx) [root@server1 ~]#
user nginx; worker_processes 1;
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf [root@server1 ~]# nginx -s reload [root@server1 ~]# ps -ef |grep nginx |grep -v grep root 2120 1 0 10:03 ? 00:00:00 nginx: master process nginx nginx 2206 2120 0 11:16 ? 00:00:00 nginx: worker process [root@server1 ~]#

當(dāng)我啟動(dòng)nginx以后
有兩個(gè)nginx進(jìn)程,一個(gè)master進(jìn)程,一個(gè)worker進(jìn)程,這兩個(gè)nginx進(jìn)程都有各自的作用,見(jiàn)名知意, "worker"進(jìn)程天生就是來(lái)"干活"的,真正負(fù)責(zé)處理請(qǐng)求的進(jìn)程就是你看到的"worker"進(jìn)程,那么"master"進(jìn)程有什么用呢? “master"進(jìn)程其實(shí)是負(fù)責(zé)管理"worker"進(jìn)程的,除了管理” worker"進(jìn)程,master"進(jìn)程還負(fù)責(zé)讀取配置文件、判斷配置文件語(yǔ)法的工作,“master進(jìn)程"也叫"主進(jìn)程”,在nginx中,"master"進(jìn)程只能有一個(gè),而"worker"進(jìn)程可以有多個(gè),worker"進(jìn)程的數(shù)量可以由管理員自己進(jìn)行定義,那么怎么定義"worker"進(jìn)程的數(shù)量呢?
沒(méi)錯(cuò),我們只需要借助一條配置指令即可,
這條配指令就是"worker _processes"指令
默認(rèn)的nginx.conf配置文件中有這樣一條配置
worker_ processes 1;
上述配置的意思就是啟動(dòng)nginx后只有1個(gè)worker進(jìn)程,你想要多少個(gè)worker進(jìn)程,將worker_ processe指令的值設(shè)置成多少就好了,非常簡(jiǎn)單, worker_ processes指令只能在main區(qū)域中使用,通常情況下,
worker_ processes的值通常不會(huì)大于服務(wù)器中cpu的核心數(shù)量,
換句話說(shuō)就是,worker進(jìn)程的數(shù)通常與服務(wù)器有多少
cpu核心有關(guān),比如,nginx所在主機(jī)擁有4核cpu,那么worker_ processes的值通常不會(huì)大于4,這樣做的原因是為了盡力讓每個(gè)worker進(jìn)程都有一個(gè)cpu可以使用,盡量避免了多個(gè)worker進(jìn)程搶占同一個(gè)cpu的情況,我們也可以將worker_ processes的值設(shè)置為"auto"
當(dāng)worker_ processes的值為auto時(shí),nginx會(huì)自動(dòng)檢測(cè)當(dāng)前主機(jī)的cpu核心數(shù),并啟動(dòng)對(duì)應(yīng)數(shù)量的worker進(jìn)程,比如,
nginx檢測(cè)到當(dāng)前主機(jī)一共有4個(gè)cpu核心
那么nginx就會(huì)啟動(dòng)4個(gè)worker進(jìn)程
user nginx; worker_processes auto;
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf [root@server1 ~]# nginx -s reload nginx: [alert] kill(2120, 1) failed (3: No such process) [root@server1 ~]# nginx [root@server1 ~]# nginx -s reload [root@server1 ~]# ps -ef | grep nginx |grep -v grep root 2134 1 0 11:46 ? 00:00:00 nginx: master process nginx nginx 2140 2134 0 11:46 ? 00:00:00 nginx: worker process nginx 2141 2134 0 11:46 ? 00:00:00 nginx: worker process nginx 2142 2134 0 11:46 ? 00:00:00 nginx: worker process nginx 2143 2134 0 11:46 ? 00:00:00 nginx: worker process [root@server1 ~]#

同時(shí),為了避免cpu在切換進(jìn)程時(shí)產(chǎn)生性能損耗,我們也可以將worker進(jìn)程與cpu核心進(jìn)行"綁定",當(dāng)worker進(jìn)程與cpu核心綁定以后,worker進(jìn)程可以更好的專(zhuān)注的使用某個(gè)cpu核心上的緩存,從而減少因?yàn)閏pu切換不同worker進(jìn)程而帶來(lái)的緩存失效,如果想要讓worker進(jìn)程與某個(gè)cpu核心綁定,則需要借助另外一個(gè)配置指令,它就是"worker_ cpu_ affinity"指令
想要搞明白怎樣使用"worker_ cpu_ affinity" 指令,最好先來(lái)了解一個(gè)概念,這個(gè)概念就是"cpu掩碼",我們可以通過(guò)"cpu掩碼"表示某個(gè)cpu核心,
比如,當(dāng)前機(jī)器上一共有4個(gè)cpu核心,那么我們就用4個(gè)0表示這4個(gè)核,也就是說(shuō),我們可以使用如下字符表示這4個(gè)核:
0000
那么第一個(gè)核就用如下字符表示
0001
第二個(gè)核就用如下字符表示
0010
第三個(gè)核就用如下字符表示
0100
規(guī)律就是,有幾個(gè)核,就用幾個(gè)0表示,如果想要使用某個(gè)核,就將對(duì)應(yīng)位的0改成1,位從右邊開(kāi)始
比如,如果有8個(gè)核,我就可以使用如下字符表示這8個(gè)核中的第二個(gè)核:
00000010
user nginx; worker_processes auto; worker_cpu_affinity 1000 0100 0010 0001;

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
nginx?攔截指定ip訪問(wèn)指定url的實(shí)現(xiàn)示例
本文主要介紹了nginx?攔截指定ip訪問(wèn)指定url的實(shí)現(xiàn)示例,使用$http_x_forwarded_for變量來(lái)獲取客戶端的真實(shí)IP地址,感興趣的可以了解一下2024-12-12
nginx中狀態(tài)統(tǒng)計(jì)的實(shí)現(xiàn)
本文主要介紹了nginx中狀態(tài)統(tǒng)計(jì)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
nginx 反向代理之 proxy_pass的實(shí)現(xiàn)
這篇文章主要介紹了nginx 反向代理之 proxy_pass的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
nginx反向代理https內(nèi)部定向到http報(bào)302的問(wèn)題及解決
這篇文章主要介紹了nginx反向代理https內(nèi)部定向到http報(bào)302的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

