Linux

Apache prefork 優化 - 選擇正確的 MaxRequestsPerChild

  • August 9, 2012

我正在嘗試優化我們的網路伺服器以處理盡可能多的連接。我閱讀了很多文章和 Apache 筆記。我試圖了解我應該為MaxRequestsPerChild.

起初,我嘗試將其設置為 4,000,但伺服器在處理許多請求時遇到了困難,所以我開始提高它。目前我的設置是:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  40000
</IfModule>

將 設置MaxRequestsPerChild為 40,000 後,伺服器設法在不使用更多記憶體/cpu 的情況下處理更多連接。

誰能告訴我這個值是太高還是可以有這麼高的值?

謝謝!

作業系統資訊:

[root@web06 ~]# uname -a
Linux web 2.6.18-164.el5PAE #1 SMP Thu Sep 3 04:10:44 EDT 2009 i686 i686 i386 GNU/Linux
[root@web06 ~]# free
            total       used       free     shared    buffers     cached
Mem:       3814660    3502968     311692          0     144368    2970468
-/+ buffers/cache:     388132    3426528
Swap:      5210104          0    5210104

MaxRequestsPerChild在執行動態腳本時,它實際上只對限制記憶體洩漏量有用。如果您只是提供靜態內容或非常小/簡單的腳本,那麼您可以將其設置為 0 或非常高而不會產生太大影響。如果您正在執行更大/複雜的腳本,那麼將其設置為 0/high 將導致您的 Apache 程序消耗越來越多的記憶體。具體多少取決於您的具體應用。

另一方面,將其設置得非常低實際上可能會導致稍微增加 CPU 使用率,因為 Apache 程序會不斷地重新啟動。

我會做一個簡單的測試,看看你的程序可以使用多少記憶體。設置MaxRequestsPerChild為 0 並重新啟動 Apache。測試載入幾個頁面並查看 Apache 程序使用的初始大小top。幾小時/幾天/幾週後再次檢查(取決於您的應用程序和頁面瀏覽量),看看它是如何增長的。如果它沒有增長太多,那麼 0 或非常大的值MaxRequestsPerChild應該沒問題。

如果您為 Apache 程序設置了最大大小(即,您希望它們為 50MB 或更少),那麼您可以對不同的值進行相同的測試,MaxRequestsPerChild直到找到一個使 Apache 小於該值的值。

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