擁有更多的 CPU 核心對於運行 Web 伺服器來說是更好的事情嗎?

擁有更多的 CPU 核心對於運行 Web 伺服器來說是更好的事情嗎?

我正在閱讀有關如何將用戶線程映射到內核線程的信息維基百科。從這篇文章中我了解到FreeBSD使用1:1(核心級線程)。

因此應用程式創建的每個用戶執行緒都映射到一個核心執行緒。如果我假設我正在建立一個 Web 伺服器來處理線程中的每個新請求並且我在 FreeBSD 上運行,那麼增加核心數量會提高應用程式的整體效能嗎?

我讀過這個問題CPU 核心數:越多越好?,但我希望答案的範圍特別受到用戶線程和內核線程之間 1:1 映射的影響。

答案1

簡短的回答是肯定的。

長的答案是......擁有更多的CPU核心意味著擁有更多的處理能力。對於 PHP / Ruby / Python / 等 Web 應用程序,這意味著需要更多資源來處理並發連接。在負載繁重的應用程式中,擁有更多的核心確實會帶來不同。

我個人的觀點是,在更多處理能力和更多 RAM 之間進行選擇時,大多數情況下我會選擇更多 RAM。使用 RAM,您可以減少磁碟 I/O 瓶頸。

透過使用快取系統,例如PHP APC,, 和MySQL調優(表格快取、查詢快取等...),您可以大幅提高網站效能,而無需更多的 CPU 能力來產生內容。

如果您的網站可以緩存,請做出此選擇。從長遠來看,僅僅增加CPU核心數量是一個失敗的選擇。

答案2

是的。

現代網路伺服器軟體為連接到伺服器的每台電腦使用單獨的進程或執行緒。此外,MySQL 或 PHP 等後端軟體也針對需要服務的每個使用者在單獨的進程或執行緒中運行,因此擁有更多核心總是有幫助的。

當然,在更密集的環境中,磁碟效能、記憶體或網路頻寬最終可能會成為瓶頸。更多的記憶體允許更多的讀取緩存,這將減少對慢速磁碟儲存的存取。正如 Biapy 所建議的,如果您每秒處理大量請求,您應該考慮使用專門的快取軟體,例如 Varnish,這將大大減少系統負載。

答案3

像往常一樣,答案是視情況而定。

例如,nginx網路伺服器表現很好,即使它不使用線程。它使用事件驅動的架構。它可以並且確實使用多個工作進程,因此它可以利用多個核心。

正如您在連結的效能測量中所看到的,如果並發連線數增加,則線程化 apache Web 伺服器會產生更多執行緒並使用更多記憶體。 nginx 使用的記憶體量保持相當穩定。在每秒處理的請求量方面,nginx 大幅領先 apache。

所以線程並不總是最好的解決方案。

效能也取決於資料所在的位置。如果它停放在硬碟上,則與記憶體中相比,存取速度會慢,而 RAM 又比處理器快取慢得多。如果您想加快網頁伺服器的速度,請考慮使用加速器,例如。考慮閱讀本文由 Varnish 的主要作者撰寫,關於 Web 服務的效能。這裡的訊息是你應該使用作業系統的內建快取機制,您不應該嘗試自己做同樣的工作。

相關內容