调优 PHP
調優 PHP ?
PHP 是運行應用程序代碼的引擎。應該僅安裝計劃使用的那些模塊,并配置您的 Web 服務器,使之僅為腳本文件(通常是以 .php 結尾的那些文件)使用 PHP,而非所有靜態文件。
操作碼緩存
請求一個 PHP 腳本時,PHP 會讀取該腳本,并將其編譯為 Zend 操作碼,這是要執行的代碼的一種二進制表示形式。隨后,此操作碼由 PHP 執行并丟棄。操作碼緩存將保存這個編譯后的操作碼,并在下一次調用該頁面時重用它。這會節省很多時間。有多種緩存可用,我比較常用的是 eAccelerator。
要安裝 eAccelerator,您的計算機上需要有 PHP 開發庫。由于不同的 Linux 發布版存放文件的位置不同,所以最好直接從 eAccelerator 的 Web 站點獲得安裝說明(參見 參考資料 部分獲得鏈接)。您的發布版也有可能已經包含了一個操作碼緩存,只需安裝即可。
無論如何在系統上安裝 eAccelerator,都有一些配置選項需要注意。配置文件通常是 /etc/php.d/eaccelerator.ini。eaccelerator.shm_size 定義共享高速緩存的大小,編譯后的腳本就存儲在 這里。該值的單位是兆字節(MB)。根據您的應用程序確定恰當的大小。eAccelerator 提供了一個腳本來顯示緩存的狀態,其中包含內存占用,64MB 是個不錯的選擇(eaccelerator.shm_size="64")。如果您選擇的值未被接受,那么必須修改內核的最大共享內存的大小。向 /etc/sysctl.conf 添加 kernel.shmmax=67108864,運行 sysctl -p 來使設置生效。kernel.shmmax 值的單位是字節。
如果共享內存的分配超出極限,eAccelerator 必須將舊腳本從內存中清除。默認情況下,這是被禁用的;eaccelerator.shm_ttl = "60" 指定:當 eAccelerator 用完共享內存時,60 秒內未被訪問的所有腳本都將被清除。
另一種流行的 eAccelerator 替代工具是 Alternative PHP Cache(APC)。Zend 的廠商也提供了一種商業操作碼緩存,包括一個進一步提高效率的優化器。
php.ini
PHP 的配置是在 php.ini 中完成的。四個重要的設置控制 PHP 可使用多少系統資源,如表 1 所列。
表 1. php.ini 中與資源相關的設置
| max_execution_time | 一個腳本可使用多少 CPU 秒 | 30 |
| max_input_time | 一個腳本等待輸入數據的時間有多長(秒) | 60 |
| memory_limit | 在被取消之前,一個腳本可使用多少內存(字節) | 32M |
| output_buffering | 數據發送給客戶機之前,有多少數據(字節)需要緩存 | 4096 |
具體數字主要取決于您的應用程序。如果要從用戶處接收大文件,那么 max_input_time 可能必須增加,可以在 php.ini 中修改,也可以通過代碼重寫它。與之類似,CPU 或內存占用較多的程序也可能需要更大的設置值。目標就是緩解超標程序的影響,因此不建議全局禁用這些設置。關于 max_execution_time, 還有一點需要注意:它表示進程的 CPU 時間,而不是絕對時間。因此一個進行大量 I/O 和少量計算的程序的運行時間可能遠遠超過 max_execution_time。這也是 max_input_time 可以大 于 max_execution_time 的原因所在。
PHP 可執行的日志記錄數是可配置的。在生產環境中,禁用除最重要的日志以外的一切日志記錄能夠減少磁盤寫操作。如果需要使用日志來排除問題,那么可以按需啟用 日志記錄。error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR 將啟用足夠的日志記錄,使您發現問題,同時從腳本中消除大量無用的內容。
結束語
本文重點探討 Web 服務器的調優,包括 Apache 和 PHP。對于 Apache,總體的想法是消除 Web 服務器必須執行的多余檢查,例如處理 .htaccess 文件。還必須調優所用的多處理模塊,以便在使用的系統資源和可供傳入請求使用的空閑 worker 之間找到平衡。對于 PHP,最好的事情就是安裝一個操作碼緩存。密切注意幾個資源設置也能確保腳本不會浪費系統資源,不會減慢系統處理其他任務的速度。
本系列的下一篇也是最后一篇文章將介紹 MySQL 數據庫的調優。請繼續關注!
參考資料
學習
您可以參閱本文在 developerWorks 全球網站上的 英文原文。
“使用應用程序跟蹤對性能改變進行量化分析 ” (developerWorks,2006 年 8 月)介紹了如何利用應用程序追蹤來展示 Apache 配置更改的效果。
“PHP V5.2 中的新增功能,第 1 部分: 使用新的內存管理器 ”(developerWorks,2007 年 4 月)涵蓋了 PHP 5.2 在內存處理方面的最新變化。PHP 一直在不斷優化其對系統資源的使用。
mod_deflate 是一個 Apache 模塊,可動態壓縮輸出。在 PHP 中也可通過 輸出壓縮 實現這種功能。
預緩存將壓縮 JavaScript 代碼之類的靜態文件。CSS 是提高性能的另一種途徑。壓縮和連接所有 JavaScript 代碼及 CSS 就更好了。
介紹 多處理模塊 的 Apache 文檔值得一讀,可從中了解各模塊的功能性,單擊相應鏈接可查看所選 MPM 的具體文檔。
在 developerWorks 中國網站 Linux 專區 可找到針對 Linux 開發人員的更多資源。
隨時關注 developerWorks 技術活動 和 網絡廣播。
獲得產品和技術
如果您的發布版不包含 eAccelerator,Install From Source 說明會對您有所幫助。
Alternative PHP Cache 和 Zend Platform 是 eAccelerator 的替代工具。
Siege 使您可以模擬用戶,以便了解站點能夠處理多少流量。
您遲早會打算緩存站點的某些元素,并將負載分布到多個 Web 服務器上。Squid 的加速器模式(也稱為反向代理)或 Linux Virtual Server Project 都是不錯的工具。
訂購 SEK for Linux,這有兩張 DVD,包含用于 Linux 的最新 IBM 試用軟件,包括 DB2、Lotus、Rational、Tivoli 和 WebSphere。
利用可從 developerWorks 直接下載的 IBM 試用版軟件 構建您的下一個 Linux 開發項目。
轉載于:https://blog.51cto.com/wenzengliu/1684529
總結
- 上一篇: TCP选项:TCP_NODELAY和TC
- 下一篇: PhpStorm配置Xdebug调试PH