Nginx

在同一台機器上執行多個實例時的 Nginx 性能

  • September 1, 2015

我試圖了解在同一台機器上執行多個 nginx 實例(主實例)對性能的影響,而不是讓它們都使用不同的伺服器塊載入到單個實例中。使用多個 nginx 實例如何影響諸如 worker_process 和 worker_connections 優化之類的事情?

我看到大量建議表明 worker_process 應該反映核心數量,並且最多應該是核心數量的兩倍。我也明白worker_connections應該匹配ulimit,或者低於ulimit。提供太多可用的連接,或者每個核心有太多的工作人員應該會損害性能。

我有兩個核心和 1024 的 ulimit,但我有 4 個 nginx 實例,每個實例具有以下設置:

worker_processes 4;
worker_connections: 1024;

這不是和我有一樣的效果worker_processes 16;and worker_connections 4069;嗎?

注意:讓我說清楚,當我說 nginx 實例時,我的意思是有 4 個獨立的主 nginx 程序,每個程序提供一個具有相似設置的不同配置文件,並且每個都有自己的工作人員。

注 2:這個場景是我繼承的並且已經存在。我想弄清楚我是否應該改變 nginx 的配置方式並有一個明智的理由。

從系統的角度來看,執行具有 4 個伺服器部分的 4 個主伺服器或具有 16 個伺服器部分的單個主伺服器沒有本質上的區別。它實現了相同的架構:並行化的基於事件的流程。

如果您有多個主人,則工人/核心比率必須考慮到所有主人的工人總數。這來自幾個限制:

  • 確保 CPU 沒有過載,因此工作人員的數量應該 <= 核心數量
  • 確保充分利用並行化和作業系統調度,因此工作人員的數量應盡可能多
  • HTTP 伺服器工作人員的 CPU 使用率很低,並且主要等待 I/O,因此分配 2 或 4 倍核心數之間的東西實際上是安全的

使用單個 master 應該會更高效一些,因為 MIME 映射等一些資源只會載入一次。但這是一個小問題。

使用單個 master 應該更有效,因為所有伺服器共享一個大型工作池。如果單個伺服器暫時需要大多數工作人員(比如 16 個),它可能會得到他們。在多主機配置上(比如 4 個主機和 4 個工人),他們最多只能使用他們擁有的東西:4 個工人。另一方面,它可能是想要的效果:嚴格分成 4 個實例,以確保每個實例始終至少獲得主機四分之一的注意力。但再也不會了。

使用 1 個 master 應該更容易配置和維護(想想:安全更新)。

4 個 master 應該更有彈性:您可以在不觸及其他 3 個 master 的情況下崩潰或完全弄亂一個 master 配置。

除非你的 4 個 master 使用不同的 Nginx 版本,否則你不會從超級優化中受益,比如為每個 master 編譯精確的模組集。

引用自:https://serverfault.com/questions/713390