回答
想象一下一些進程在一個端口上偵聽並在epoll中等待。 如果不接受互斥鎖,所有進程都會喚醒,但只有一個將能夠接受連接。其他一些進程被喚醒並沒有成效。 這是衆所周知的http://en.wikipedia.org/wiki/Thundering_herd_problem
但它不是故事的結尾。
經常或總是不成功接受將導致上下文切換: http://en.wikipedia.org/wiki/Lock_convoy
我的測試表明5-10%的性能丟失,並且沒有接受互斥。
更新:「接受互斥體」不僅僅是圍繞接受鎖定的互斥體。 這是用於序列化在工作人員之間監聽服務器端口的技術名稱。 只有一名員工正在某個時刻監聽給定的端口。
如果接受互斥鎖更有效率,爲什麼還有關閉選項?它何時有用? – 2013-03-28 01:49:32
據我所知,接受互斥鎖和其他模塊/配置很少遇到問題。有時候設置accept_mutes可能會有所幫助。 – 2013-03-28 05:40:25
關閉'accept_mutex';'如果qps的數量是>> 10k,則可以將延遲降低數十毫秒 – SaveTheRbtz 2014-10-10 23:46:26
截至nginx主線版本1.11.3(2016-07-26發佈),accept_mutex
now defaults to off
。這部分是因爲新的EPOLLEXCLUSIVE
標誌提供accept_mutex
的好處而沒有額外的開銷。
- 1. 爲什麼NGINX想要使用./logs/error.log作爲默認值?
- 2. 使用時:=,爲什麼with = TRUE默認?
- 3. 爲什麼默認值不使用Django
- 4. 爲什麼PyCrypto不使用默認IV?
- 5. 爲什麼NFS默認使用UDP?
- 6. 爲什麼nginx的默認爲我的ProxyPass?
- 7. 爲什麼jgit默認
- 8. 爲什麼不是默認
- 9. 依靠默認編碼,我應該使用什麼,爲什麼?
- 10. 爲什麼DoubleBuffered默認禁用?
- 11. 爲什麼要調用默認的aspx?
- 12. 爲什麼UIBarButtonItem默認是禁用的?
- 13. 爲什麼默認禁用CORS?
- 14. 爲什麼不應用默認樣式?
- 15. L10N:爲什麼應用默認語言
- 16. SQL Server:爲什麼默認禁用xp_cmdshell?
- 17. 爲什麼Spring Security使用默認的預認證檢查?
- 18. 默認使用nginx無法打開index.php
- 19. 爲什麼nginx總是迴應默認網站,即使它現在應該?
- 20. 爲什麼Reduux在Redux中默認稱爲默認值?
- 21. S3默認使用什麼Glacier庫?
- 22. Class.forName默認使用什麼ClassLoader?
- 23. 在NOT NULL字段顯式使用「默認默認值」的MS SQL - 爲什麼?
- 24. 爲什麼==和!=默認爲ValueType的object.Equals?
- 25. @RestController方法默認爲Transactional,爲什麼?
- 26. 爲什麼grails.views.default.codec默認爲「html」?
- 27. 爲什麼IBAction類型默認爲AnyObject?
- 28. 爲什麼Solr默認多值爲真?
- 29. 爲什麼print-circle默認爲零?
- 30. 李爲什麼默認爲換行符?
是的。它使用互斥來序列化新的連接。你可以在這裏找到一些信息:http://nginx.org/en/docs/ngx_core_module.html#accept_mutex。不過,我想知道更多。 – 2013-03-26 15:38:36
僅供參考:'accept_mutex'現在默認爲'off',因爲Nginx 1.11.3(https://nginx.org/en/CHANGES) – Sicco 2016-09-13 23:05:16