一:main參數
1.1 worker_processes
# 指定nginx開啟worker工作子進程數量# number默認1,建議配置數量與CPU核心數量相等worker_processes number復制代碼
1.2 worker_cpu_affinity
# nginx默認未開啟利用多核CPU,開啟某個核心該位置標志為1即可# worker_processes 最多開啟8個,所以多核最多8個也就夠用。示例配置開啟4核worker_cpu_affinity 00000001 00000010 00000100 00001000復制代碼
1.3 worker_priority
# 進程優先級,數值越低占用資源越多# number默認10,值范圍-20 ~ 20# 建議配置-10即可,最好別低于Linux系統進程-5優先級worker_priority number復制代碼
1.4 worker_rlimit_nofile
# 一個子進程可以打開文件描述限制# nginx默認一個子進程打開文件描述限制數量 = (ulimt -u) / worker_processes# 因為進程處理連接任務很多時候不均衡,所以最好設置為與系統數量一致worker_rlimit_nofile (ulimit -u)復制代碼
1.5 error_log
# file指定日志輸出文件位置,默認logs/error.log# level指定日志輸出最低級別,默認error級別。當然可以設置為debug、info等error_log file [level]復制代碼
1.6 pid
# file默認值logs/pid.log,指定nginx中master進程的PID輸出文件位置pid file復制代碼
1.7 user
# user第二個參數user,配置nginx進程運行用戶,默認nobody# group配置nginx進程運行用戶組,默認nobodyuser user [group]復制代碼
二:Events參數
2.1 worker_connections
# nginx指定一個子進程可處理連接數量# number默認數量1024# nginx可處理連接總數 = worker_processes * worker_connecitonsworker_connections number復制代碼
2.2 accept_mutex
accept_mutex參數為工作進程處理連接accept互斥鎖開關,1.11.3之前默認on,之后的版本則是默認off
2.2.1 驚群現象
Nginx可以通過worker_processes參數配置多個工作進程,多個工作進程fork后會監聽同一個端口。如果有一個外部連接進來就會喚醒所有子進程搶奪該連接,除一個子進程成功處理accept事件意外子進程都會重新休眠。導致很多不必要的上下文切換。這就是驚群現象
2.2.2 accept鎖處理
nginx通過增加accept互斥鎖讓注冊到epoll中的進程只有一個,從而避免驚群現象。也就是連接進來時只能有一個子進程去處理
嘗試獲取accept鎖if success 在epoll中注冊accept事件else 在epoll中注銷accept事件 處理所有連接事件 釋放accept鎖復制代碼
2.2.3 accept鎖缺點
accept鎖看似完美解決了驚群現象帶來的問題,但是也帶來了某些子進程很忙,某些子進程很閑的問題,特別是在吞吐并發比較高的應用中。通俗來講就是worker子進程負載不均問題
2.2.4 配置建議
- 對于分布式應用短連接來講最好是打開該參數,這樣避免過多的上下文切換開銷
- 對于長連接應用最好是關閉該參數,避免過多連接負載到一個worker上導致某個進程CPU利用率過高
2.3 accept_mutex_delay
當accept_mutex設置為on后就需要根據應用場景調試accept_mutex_delay參數,該參數規定所有子進程多少時間后重新搶奪accept鎖。合適的參數值有助于減少worker負載不均衡問題。默認值500ms
相關推薦:nginx教程
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦