Nginx 的 accept_mutex 啟用或關閉?
引用『深入理解 Nginx:模塊開發與架構解析(第 2 版)』一書 (2016-02-01 出版):
… accept 鎖默認是打開的,如果關閉它,那麼建立 TCP 連接的耗時會更短,但 worker 進程之間的負載會非常不均衡,因此不建議關閉它。…
這句描述隨著時間推移而改變。
accept_mutex 是為了解決 accept 驚群問題,雖然 Linux Kernel 早在很久以前的版本就解決了這個問題,不過因為 accept 還依賴著 epoll,原則上必須也要解決 epoll 驚群問題才算完解。
所幸,Linux Kernel 4.5-rc1 宣布正式支持 EPOLLEXCLUSIVE,進而解決了 epoll 驚群問題。
結論,
- 只要不在特別舊的 Linux Kernel 上,原則上都可以把 accept_mutex 關閉。
- 若是在 Linux Kernel 4.5 之後版本,accept_mutex 關閉應該變成必然的選項了。
- 需注意的是,Nginx 1.11.3 之後版本,accept_mutex 預設為關閉。