2011-11-10 40 views
3

我們有一個用PHP編寫的輕量級跟蹤腳本,運行在Apache/2.2.14(Ubuntu)上。該腳本將收到大量的併發連接,但每個連接都會很快。目前,我們正在使用的prefork,配置如下:Apache2輕量級連接的高容量優化技巧

StartServers   5 
MinSpareServers  5 
MaxSpareServers  10 
ServerLimit   600 
MaxClients   600 
MaxRequestsPerChild 0 

我們也有保持活動關

我與這些設置相當多的玩耍了,並與Apache基準一直在測試。任何時候我提出與ab的併發連接,我會得到「apr_socket_recv:連接重置由對等體(104)。」我也提出了最大數量的文件描述符。

我想知道是否有任何apache的大師可以指出我在這種類型的安裝(大量的輕量級連接)的正確方向。 StartServers,Min/MaxSpareServers等的最佳值是多少?工人MPM值得研究嗎?任何想法都歡迎。

+1

您是否想用超過600個線程使用ab進行基準測試?你是否同時增加最大客戶數?也許如果你發佈一些日誌,你會幫助人們回答你的問題..(/var/log/apache/error.log等..) – Zak

回答

4

我可以給你一些提示:

  • 嘗試在工人模式,而不是prefork的使用Apache。要做到這一點,要麼將PHP置於fastcgi模式(php-fpm),要麼冒險將其保留在線程化apache工作者的mod_php中(風險在於siome外部庫可能會與區域設置衝突,但如果您的PHP跟蹤代碼是小,你可以控制,所有東西都有多線程啓用 - 沒有任何外部庫的PHP5是多線程啓用)
  • 如果你MaxClient是600然後把600在StartServersMinSpareServersMaxSpareServers。否則Apache是​​在very low speed創建一個新的分支:

父進程產生在1每秒的最大速率新的兒童。

,如果你認爲你的服務器可以處理600個叉再取RAM,創建600個叉子,也許改變MaxRequestsPerChild設定成類似3000,所以,有時老叉被刪除並重新創建(避免memleaks)。您不會在任何時候創造分支創建速度,並且Apache不會隨時管理創建和刪除兒童的任何事情。

  • 禁用保持活動是在你的情況是一件好事,因爲你沒有
  • 要知道什麼是MaxLients正確的價值,無論是在預派生或工作模式,只是測試它,追蹤由一個叉使用的內存並用這個數字來劃分你可用RAM的內容。要小心,php也會使用一些RAM,mod_php這個RAM將在apache fork內存中使用,在php-fpm中它將在php-fpm進程中,檢查memory_limit設置在PHP中的最大大小爲1 PHP過程。
  • 減少您的PHP RAM使用量,以便您能夠並行運行更多的PHP腳本。不要建立大數組,保持會話點亮等。使用APC操作碼可以減少你的內存佔用(也可以做其他很好的事情),也可以使用PHP 5.3而不是5.2。
+0

謝謝,正是我在找什麼。你能否在這方面詳細闡述一下prefork vs worker? – user1040700

+0

那麼,工作人員可以很容易地獲得更多的並行請求(每個分支25到75個並行請求,而不是一個),但是可能少於60個分支,您需要測試您可以分配多少分支 - 特別是如果每​​個PHP過程需要大量的內存。 – regilero