Apache-2.2

ServerLimit、MaxClients、MaxRequestsPerChild 指令的最佳值

  • April 15, 2015

我正在執行一個流量密集的站點,其中包含大量動態內容,主要是使用者生成的。

該伺服器是專用伺服器,共有 4 個 Intel(R) Xeon(R) CPU X3210 @ 2.13GHz 處理器。考慮到伺服器有 4GB 的 RAM 並且 MySQL 數據庫在單獨的伺服器上執行,我需要知道 ServerLimit 和 MaxClients apache 指令的最佳值。該面板是帶有 CentOS 的 DirectAdmin。

以下是我目前的指令,但是在超過 5k 使用者的高峰時段,注意到了一個重要的滯後——這不完全是 MySQL 的錯,因為頁面似乎生成得很快(我實現了一個頁面生成時間計數器),但是有很長的頁面開始響應並發送到瀏覽器之前的連接延遲。

<IfModule prefork.c>
   StartServers     800
   MinSpareServers   20
   MaxSpareServers   60
   ServerLimit      900
   MaxClients       900
   MaxRequestsPerChild  2000
</IfModule>
Timeout 90
KeepAlive On
KeepAliveTimeout 5

我應該提一下,使用 top 命令監控伺服器,CPU 使用率在高峰時段永遠不會超過 20% ~ 30%。MySQL 伺服器當時也有 30~50% 的使用率,我一直在努力修復慢查詢,但這是一個不同的問題。我知道這不是數據庫瓶頸,因為靜態頁面在高峰時段也需要很長時間才能載入。

任何優化這些值的提示將不勝感激,謝謝。

您的 MaxClients 太高了。您的 apache 程序的目前大小是多少?乘以 x 900。是否大於 4GB?如果是這樣,機器可能會進入交換狀態。我通常從框中的 MaxClients = 2x vCPU 開始(grep -c 處理器 /proc/cpuinfo)。在這種情況下大約為 8。然後確保 MaxClients x apache 程序大小不超過 4GB。

您可以從那裡升級您的 MaxClients,具體取決於您的客戶所擁有的連接類型。(撥號使用者需要被灌輸,等等。)但要確保你永遠不會讓自己陷入交換的境地。

然後將 Min、Max 和 Start 伺服器設置為 MaxClients。在專用伺服器環境中沒有必要讓它們有所不同。

然後用 ab 做一些測試(如鵝的筆記。)

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