1, listen per_workernginx
listen 80; listen 8010 per_worker;
per_worker是說明當前的nginx除了創建在80號的端口上的偵聽以外,還須要創建8010開始的4個(由worker_processess配置決定的)端口。git
而後,啓動nginx,再在命令行上測試github
# sudo sbin/nginx -c your_demo_directory/nginx.conf for port in 80 {8010..8013}; do curl "http://127.0.0.1:$port/test"; done
顯示相似以下,即檢測成功。shell
2, accept_mutexcurl
假設你養了一百隻小雞,如今你有一粒糧食,那麼有兩種餵食方法:工具
能夠看到此場景下,激活accept_mutex相對更好一些,讓咱們修改一下問題的場景,我再也不只有一粒糧食,而是一盆糧食,怎麼辦?性能
此時若是仍然採用主動抓小雞過來塞糧食的作法就過低效了,一盆糧食不知何年何月才能喂完,你們能夠設想一下幾十只小雞排隊等着餵食時那種翹首以盼的情景。此時更好的方法是把這盆糧食直接撒到小雞中間,讓它們本身去搶,雖然這可能會形成必定程度的混亂,可是總體的效率無疑大大加強了。測試
實際上咱們能夠經過工具來測量 accept_mutex 對性能的影響,好比說 ngx-req-distr:url
開啓 accept_mutex 時:spa
shell> ./ngx-req-distr -m `cat /path/to/nginx.pid` Tracing 12970 12971 12972 12974 (/path/to/nginx)... Hit Ctrl-C to end. ^C worker 12970: 0 reqs worker 12971: 37 reqs worker 12972: 127 reqs worker 12974: 3 reqs
關閉 accept_mutex 時:
shell> ./ngx-req-distr -m `cat /path/to/nginx.pid` Tracing 20433 20434 20435 20436 (/path/to/nginx)... Hit Ctrl-C to end. ^C worker 20433: 75 reqs worker 20434: 32 reqs worker 20435: 29 reqs worker 20436: 44 reqs
明顯能夠看出,同開啓 accept_mutex 相比,關閉 accept_mutex 的時候,請求在多個 worker 間的分配更均衡了
ref :
https://github.com/aimingoo/ngx_cc/wiki/%E7%AE%80%E4%BB%8B
https://huoding.com/2013/08/24/281