# 指定nginx開啓worker工做子進程數量
# number默認1,建議配置數量與CPU核心數量相等
worker_processes number
複製代碼
# nginx默認未開啓利用多核CPU,開啓某個核心該位置標誌爲1便可
# worker_processes 最多開啓8個,因此多核最多8個也就夠用。示例配置開啓4核
worker_cpu_affinity 00000001 00000010 00000100 00001000
複製代碼
# 進程優先級,數值越低佔用資源越多
# number默認10,值範圍-20 ~ 20
# 建議配置-10便可,最好別低於Linux系統進程-5優先級
worker_priority number
複製代碼
# 一個子進程能夠打開文件描述限制
# nginx默認一個子進程打開文件描述限制數量 = (ulimt -u) / worker_processes
# 由於進程處理鏈接任務不少時候不均衡,因此最好設置爲與系統數量一致
worker_rlimit_nofile (ulimit -u)
複製代碼
# file指定日誌輸出文件位置,默認logs/error.log
# level指定日誌輸出最低級別,默認error級別。固然能夠設置爲debug、info等
error_log file [level]
複製代碼
# file默認值logs/pid.log,指定nginx中master進程的PID輸出文件位置
pid file
複製代碼
# user第二個參數user,配置nginx進程運行用戶,默認nobody
# group配置nginx進程運行用戶組,默認nobody
user user [group]
複製代碼
# nginx指定一個子進程可處理鏈接數量
# number默認數量1024
# nginx可處理鏈接總數 = worker_processes * worker_connecitons
worker_connections number
複製代碼
accept_mutex參數爲工做進程處理鏈接accept互斥鎖開關,1.11.3以前默認on,以後的版本則是默認offnginx
Nginx能夠經過worker_processes參數配置多個工做進程,多個工做進程fork後會監聽同一個端口。若是有一個外部鏈接進來就會喚醒全部子進程搶奪該鏈接,除一個子進程成功處理accept事件意外子進程都會從新休眠。致使不少沒必要要的上下文切換。這就是驚羣現象bash
nginx經過增長accept互斥鎖讓註冊到epoll中的進程只有一個,從而避免驚羣現象。也就是鏈接進來時只能有一個子進程去處理併發
嘗試獲取accept鎖
if success
在epoll中註冊accept事件
else
在epoll中註銷accept事件
處理全部鏈接事件
釋放accept鎖
複製代碼
accept鎖看似完美解決了驚羣現象帶來的問題,可是也帶來了某些子進程很忙,某些子進程很閒的問題,特別是在吞吐併發比較高的應用中。通俗來說就是worker子進程負載不均問題分佈式
當accept_mutex設置爲on後就須要根據應用場景調試accept_mutex_delay參數,該參數規定全部子進程多少時間後從新搶奪accept鎖。合適的參數值有助於減小worker負載不均衡問題。默認值500msui