我有一個資料庫密集型的 PHP 應用程序,可以運行數小時處理並建立數千個外部網路連接。
任何時候連接到此應用程式的使用者數量均少於 3 個。
哪個 apache mpm 最適合此工作負載,prefork/mod_php 還是worker/mod_fcgid?
我使用的是 Debian Lenny x64,單核,4GB 記憶體。
答案1
對於速度較慢的機器,工作模式效果更好,並產生較低的 CPU 使用率和負載。
對於提供靜態內容的功能強大的機器,prefork mpm 大約快 5%。
如果您有機會使用 apache benchmark 進行一些測試,我建議您:阿帕契基準測試
另外,您可以看一下這個基準:Apache prefork 與worker
您的資料庫引擎安裝在同一台伺服器上嗎?
答案2
Apache 有兩個廣泛使用的 MPM 模組 - Worker MPM 和 Pre-fork MPM。 PHP.net 建議您使用 Pre-fork MPM,而大多數網站最佳化專家會敦促您使用執行緒 Worker MPM。令人驚訝的是,負載測試顯示出相對較小的效能差異 - 當然不會促使您在伺服器上採用不建議的實作。
答案3
Worker + PHP 透過FastCGI 往往運作得很好,歷史上很多人建議不要將mod_php 與任何線程MPM 一起使用(因為一些第4 方庫不能很好地工作),使用FastCGI 基本上將PHP 從網絡伺服器中“分離” ,避免這個問題。
另一個優點是,現在 apache 執行緒/進程大小更小,因此您可以為 Web 伺服器(提供靜態內容)使用更多執行緒/進程,並且很少有 PHP 進程執行網站的動態部分。