我的網站在白天 2 小時內收到大量流量(每分鐘 2000 次點擊)。當天剩餘時間的流量較少(每分鐘 500 次點擊)。我一直在嘗試 MaxClients 和 MaxSpareServers 值,但在高峰時段我仍然會遇到一些停機時間。

如何根據我擁有的內存量計算我的配置的最佳值?

每個進程相當於 36-40 M 內存

             total       used       free     shared    buffers     cached
Mem:          3096        793       2302          0          0          0
-/+ buffers/cache:        793       2302
Swap:  

      0          0          0

我現在使用的值

<IfModule prefork.c>
StartServers 10
MinSpareServers 22
MaxSpareServers 60
ServerLimit 90
MaxClients 90
MaxRequestsPerChild  400

更新:我從我的託管提供者那裡找到了這個。

http://kb.mediatemple.net/questions/246/(dv)+HOWTO:+Basic+Apache+performance+tuning+(httpd)

我有 Extreme 包,我在 MaxClients 中使用了 190 而不是 200,我嘗試了半晚,收到了一些 malloc 錯誤命令列訊息,但使用 free 命令並在 free 列中得到了大約 800 M 的大小。

答案1

如果您的伺服器遇到峰值,也可能是因為 apache 處理程序和執行緒建立的速度非常慢(在 mpm_prefork 模式下,每秒 1 個新子程序)。如果你知道你的「高流量」需求(假設是 200 個進程),那麼告訴 apache 獲取總是這 200 個進程已準備就緒,即使 90% 的時間它們什麼都不做。當人們進來時你就準備好了。

檢查這個方便的簡報(舊但很酷) http://www.techpresentations.org/Hacking_Apache_HTTP_Server_at_Yahoo

不需要 StartServers、MaxSpareServers、MinSpareServers - 只需要 MaxClients(恆定池大小)

答案2

答案很大程度取決於您所提供的內容類型。是動態內容還是靜態內容?它是廣泛的內容還是單一文件?

您可以使用記憶體快取將文件儲存在記憶體中,這將使其能夠顯著擴展(消除磁碟瓶頸),但這完全取決於您擁有多少 RAM 以及內容是否變化很大。

答案3

需要根據您的伺服器硬體(尤其是記憶體)和您正在運行的網站的效率進行測試。當您停機時會發生什麼?您是否達到了設定的這些限制?你的記憶體不足了嗎?

答案4

如果您處於記憶體嚴格限制的情況 (VPS),那麼您可能需要降低預設的最大客戶端數以防止交換死亡。

如果你不是,別碰它

調整 apache 子程序就像自訂編譯核心一樣,人們絕大多數弊大於利,即使這種危害只是浪費一個下午而沒有任何好處。事實證明,apache 的 httpd 專案人員非常擅長他們所做的事情!我的意思是誰會擊中它?

相關內容