
我的網站在白天 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 專案人員非常擅長他們所做的事情!我的意思是誰會擊中它?