ServerLimit、MaxClients、MaxRequestsPerChild 指令的最佳值
我正在執行一個流量密集的站點,其中包含大量動態內容,主要是使用者生成的。
該伺服器是專用伺服器,共有 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 做一些測試(如鵝的筆記。)