1、升級硬體的一般規則:對於 PHP 指令碼而言,主要的瓶頸是 CPU ,對於靜態頁面而言,瓶頸是記憶體和網路。一台 400 Mhz 的普通奔騰機器所下載的靜態頁面就能讓 T3 專線(45Mbps)飽和。
2、Apache 處理 PHP 指令碼的速度要比靜態頁面慢 2-10 倍,因此盡量採用多的靜態頁面,少的指令碼。
3、PHP 指令碼如果不做緩衝,每次調用都需要編譯,因此,安裝一個 PHP 緩衝產品能提升 25-100% 的效能。
4、把基於檔案的會話切換到基於共用記憶體的會話。編譯 PHP 時採用 --with-mm 選項,在 php.ini 中設定 setsession.save_handler=mm 。這個簡單的修改能讓會話行政時間縮短一半。
5、另外一項緩衝技術是把不常修改的 PHP 頁面採用 HTML 緩衝輸出。
6、如果你採用了 Linux 系統,建議升級核心到 2.6.0以上(現在最新版本為2.6.10)並開啟搶佔式核心支援,因為靜態頁面由核心服務。
7、採用最新版本的 Apache ,並把 PHP 編譯其中,或者採用 DSO 模式,盡量不要採用 CGI 方式。
8、採用輸出緩衝(請參考ob_start),如果你的代碼有很多的 print 和 echo 語句,能提速 5-15% 。
9、不要在 Web 服務器上運行 X-Windows ,關掉沒有必要啟動並執行進程,如果已經安裝了X-windows,請使用 init 3退出。
10、如果能夠用文本就不要用映像,盡量減小圖片的尺寸。
11、分散負載,把資料庫伺服器放到另外的機器上去。採用另外低端的機器服務圖片和 HTML 頁面,如果所有的靜態頁面在另外一台伺服器上處理,可以設定 httpd.conf 中的 KeepAlives 為 off ,來減少中斷連線的時間。
12、採用 hdparm 來最佳化磁碟,一般能提升 IDE 磁碟讀寫效能 200%,但是對 SCSI 硬碟沒有效果。
13、修改 httpd.conf :
# 關閉 DNS lookups,PHP 指令碼只拿 IP 位址
HostnameLookups off
# 關閉 htaccess 檢測
AllowOverride none
開啟 FollowSymLinks ,關閉 SymLinksIfOwnerMatch 以防 lstat() 系統調用:
Options FollowSymLinks
#Options SymLinksIfOwnerMatch
下面還有很多關於 httpd.conf 參數的調整。
14、Kurt 簡潔而完整的 Apache Tuning Tips。
15、如果喜歡從修改 Apache 源碼入手,可以安裝 lingerd。在頁面產生和發送後,每個 Apache 進程都會浪費一段時光在客戶串連上,Lingerd 能接管這項工作,讓 Apache 迅速服務下一個客戶請求。
16、如果網路擁擠,CPU 資源不夠用,採用 PHP 的 HTML 壓縮功能:
output_handler = ob_gzhandler
PHP 4.0.4 及以前的使用者請不要使用,因為存在記憶體流失問題。
17、修改 httpd.conf 中的 SendBufferSize 為你最大的分頁檔的大小。加大核心的 TCP/IP 寫緩衝大小。
18、另外一篇文章:Tuning Apache Web Servers for Speed,一篇 97 年的很古老的文章。
19、採用資料庫的持久串連時,不要把 MaxRequestsPerChild 設定得太大。
20、Caching Tutorial for Web Authors and Webmasters 教你怎樣實現瀏覽器緩衝。
21、如果你足夠勇敢的話,還可以採用 Silicon Graphics 的 Accelerated Apache 補丁。這個工程能使 Apache 1.3 快 10 倍,使 Apache 2.0 快 4 倍。
22、來自Professional Apache的技巧。
23、官方的Performance Tuning 文檔,很好的資料,但是十分繁瑣。
24、編譯 PHP 時,建議採用如下的參數:
--enable-inline-optimization --disable-debug
25、安裝mod_gzip(apache1.3)或者mod_deflate(apache2.0)等頁面壓縮軟體減輕伺服器擁堵。同時儘可能最佳化你的HTML檔案和PHP檔案。
26、最佳化 Linux ,more Linux 以及Solaris。
27、如果系統瓶頸在MYSQL的資料操作上,可以考慮將Mysql拆分成多個連接埠甚至多個伺服器並適當最佳化my.cnf ,這比使用單個連接埠速度提高不少。
26、以上所有的方法都是針對單機而言的,如果你覺得系統還是不夠快,可以採用叢集,負載平衡,緩衝技術。採用 Squid 作為緩衝,配置 Squid 的方法。