我生產環境下的兩台Nginx + PHP5(FastCGI)伺服器,跑多個一般複雜的純PHP動態程式,從Nginx的日誌可以統計出,單台Nginx + PHP5(FastCGI)伺服器跑PHP動態程式的處理能力已經超過“700次請求/秒”,相當於每天可以承受6000萬 (700*60*60*24=60480000)的訪問量:
伺服器①:DELL PowerEdge 1950(兩顆 Intel(R) Xeon(R) 雙核CPU 5120 @ 1.86GHz,4GB記憶體)
伺服器②:DELL PowerEdge 1950(一顆 Intel(R) Xeon(R) 雙核CPU 5140 @ 2.33GHz,4GB記憶體)
Web伺服器:CentOS Linux 4.4 + Nginx 0.5.35 + PHP 5.2.6RC2(300 FastCGI Procees, unix-domain socket, with XCache)
PHP程式內容:大量Memcached讀寫、少量MySQL讀操作、大量檔案隊列寫操作,然後計算,產生供<script type="text/javascript" src="http://www.domain.com/abc.PHP?u=1"></script>方式調用的JS代碼或XML資料。
網卡流量:1.5M~3M/秒
請求數統計方式:從Nginx訪問日誌中,統計每分鐘的第15秒共有多少條日誌記錄。
引用grep "25/Mar/2008:15:01:15" /data1/logs/nginx.log | wc -l
伺服器的系統負載也不算高:
總結:
1、Nginx的處理能力超強,這塊不是瓶頸。影響動態程式處理能力的因素主要在於PHP(FastCGI)。PHP(FastCGI)模式適用於執行 時間較短的PHP程式,一般複雜的PHP程式執行時間應該在100ms以內,例如我的部落格首頁執行時間為38ms左右。假設一個PHP程式的執行時間為 100ms,那麼一個PHP(FastCGI)進程每秒可以處理完畢10個請求,300個FastCGI進程理論上每秒可以處理3000個請求。但是,在 生產環境下,還將受到記憶體、系統負載等多方面的影響,例如300個PHP(FastCGI)進程需要佔用2.4GB左右的記憶體,每秒處理超過1000個請 求時,系統負載會飆升到100以上。因此,FastCGI的進程不是越多越好,而是夠用就好。
2、使用PHP的XCache、APC等加速模組會提供速度10倍左右,降低系統負載50倍以上。
3、修改了spawn-fcgi,使它能夠支援250個以上的FastCGI進程。
4、如果PHP直接對MySQL進行大量讀寫操作,速度是達不到“700 request/sec”的,PHP與MySQL之間需要一個中介層,這是關鍵的技術。
5、CPU的數量(多核算多個CPU,cat /proc/cpuinfo |grep -c processor)越多,系統負載越低,每秒能處理的請求數也越多。
6、使用PHP 5.2.6RC2,因為它修正了PHP 5.2.5的“zend_mm_heap corrupted”錯誤BUG。PHP 5.2.5(FastCGI)在高並發請求情況下,經常會出現該錯誤。
7、有空我將寫一篇針對CentOS Linux環境Nginx + PHP5(FastCGI)安裝、配置的最新博文