LAMP下PHP的調(diào)優(yōu)
調(diào)優(yōu) PHP
PHP 是運行應用程序代碼的引擎。應該僅安裝計劃使用的那些模塊,并配置您的 Web 服務器,使之僅為腳本文件(通常是以 .php 結(jié)尾的那些文件)使用 PHP,而非所有靜態(tài)文件。
操作碼緩存
請求一個 PHP 腳本時,PHP 會讀取該腳本,并將其編譯為 Zend 操作碼,這是要執(zhí)行的代碼的一種二進制表示形式。隨后,此操作碼由 PHP 執(zhí)行并丟棄。操作碼緩存將保存這個編譯后的操作碼,并在下一次調(diào)用該頁面時重用它。這會節(jié)省很多時間。有多種緩存可用,我比較常用的是 eAccelerator。
要安裝 eAccelerator,您的計算機上需要有 PHP 開發(fā)庫。由于不同的 Linux 發(fā)布版存放文件的位置不同,所以***直接從 eAccelerator 的 Web 站點獲得安裝說明(參見 參考資料 部分獲得鏈接)。您的發(fā)布版也有可能已經(jīng)包含了一個操作碼緩存,只需安裝即可。
無論如何在系統(tǒng)上安裝 eAccelerator,都有一些配置選項需要注意。配置文件通常是 /etc/php.d/eaccelerator.ini。eaccelerator.shm_size 定義共享高速緩存的大小,編譯后的腳本就存儲在這里。該值的單位是兆字節(jié)(MB)。根據(jù)您的應用程序確定恰當?shù)拇笮?。eAccelerator 提供了一個腳本來顯示緩存的狀態(tài),其中包含內(nèi)存占用,64MB 是個不錯的選擇(eaccelerator.shm_size="64")。如果您選擇的值未被接受,那么必須修改內(nèi)核的***共享內(nèi)存的大小。向 /etc/sysctl.conf 添加 kernel.shmmax=67108864,運行 sysctl -p 來使設置生效。kernel.shmmax 值的單位是字節(jié)。
如果共享內(nèi)存的分配超出極限,eAccelerator 必須將舊腳本從內(nèi)存中清除。默認情況下,這是被禁用的;eaccelerator.shm_ttl = "60" 指定:當 eAccelerator 用完共享內(nèi)存時,60 秒內(nèi)未被訪問的所有腳本都將被清除。
另一種流行的 eAccelerator 替代工具是 Alternative PHP Cache(APC)。Zend 的廠商也提供了一種商業(yè)操作碼緩存,包括一個進一步提高效率的優(yōu)化器。
php.ini
PHP 的配置是在 php.ini 中完成的。四個重要的設置控制 PHP 可使用多少系統(tǒng)資源,如表 1 所列。
表 1. php.ini 中與資源相關(guān)的設置
設置 描述 建議值
max_execution_time 一個腳本可使用多少 CPU 秒 30
max_input_time 一個腳本等待輸入數(shù)據(jù)的時間有多長(秒) 60
memory_limit 在被取消之前,一個腳本可使用多少內(nèi)存(字節(jié)) 32M
output_buffering 數(shù)據(jù)發(fā)送給客戶機之前,有多少數(shù)據(jù)(字節(jié))需要緩存 4096
具體數(shù)字主要取決于您的應用程序。如果要從用戶處接收大文件,那么 max_input_time 可能必須增加,可以在 php.ini 中修改,也可以通過代碼重寫它。與之類似,CPU 或內(nèi)存占用較多的程序也可能需要更大的設置值。目標就是緩解超標程序的影響,因此不建議全局禁用這些設置。關(guān)于 max_execution_time,還有一點需要注意:它表示進程的 CPU 時間,而不是絕對時間。因此一個進行大量 I/O 和少量計算的程序的運行時間可能遠遠超過 max_execution_time。這也是 max_input_time 可以大于 max_execution_time 的原因所在。
PHP 可執(zhí)行的日志記錄數(shù)是可配置的。在生產(chǎn)環(huán)境中,禁用除最重要的日志以外的一切日志記錄能夠減少磁盤寫操作。如果需要使用日志來排除問題,那么可以按需啟用日志記錄。error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR 將啟用足夠的日志記錄,使您發(fā)現(xiàn)問題,同時從腳本中消除大量無用的內(nèi)容。
【編輯推薦】