nginx 經常使用配置

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。

能夠看到此場景下,激活accept_mutex相對更好一些,讓咱們修改一下問題的場景,我再也不只有一粒糧食,而是一盆糧食,怎麼辦?性能

此時若是仍然採用主動抓小雞過來塞糧食的作法就過低效了,一盆糧食不知何年何月才能喂完,你們能夠設想一下幾十只小雞排隊等着餵食時那種翹首以盼的情景。此時更好的方法是把這盆糧食直接撒到小雞中間,讓它們本身去搶,雖然這可能會形成必定程度的混亂,可是總體的效率無疑大大加強了。測試

實際上咱們能夠經過工具來測量 accept_mutex 對性能的影響,好比說 ngx-req-distrurl

開啓 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

相關文章
相關標籤/搜索