Nginx的workder進程數為什么要設置成和CPU核數一致


答:1)Ngnix一般只做高並發代理,基本沒用IO操作,算是CPU密集操作,所以再處理時基本是瞬時完成的,很少出現IO阻塞。

  2)進程與CPU調度的關系,單個核心處理多個進程的時候,是排隊處理的,所以將Worker進程數量設置超過核心數是沒有太大意義的。

 

核心思想:

每個worker進程都是單線程的進程,多workder進程可以充分利用多核系統架構,但若workder進程的數量多於CPU內核數,那么會增大進程間切換帶來的消耗(linux是搶占式內核),一般情況下,用戶要配置與CPU內核數相等的workder進程,並且使用下面的workder_cpu_affinity配置來綁定CPU內核,為什么要綁定workder進程到指定的CPU內核呢?假定每一個workder進程都是非常繁忙的,如果多個workder進程都在搶同一個CPU,那么這就會出現同步問題,反之,如果每一個worder進程都獨享一個CPU,就在內核的調度策略上實現了完全的並發,例如,如果有四顆CPU內核,就可以進行如下配置:

worker_processes 4;

worker_cpu_affinity 1000 0100 0010 0001;

備注:worker_cpu_affinity配置僅對linux操作系統有效,linux操作系統使用sched_setaffinit()系統調用實現這個功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM