1. 安裝并啟用OPcache擴展
OPcache是PHP內置的字節碼緩存擴展,可顯著減少腳本編譯時間,提升重復請求的處理速度。安裝命令:sudo apt install php-opcache
(根據PHP版本調整,如php8.2-opcache
)。啟用步驟:編輯對應PHP版本的php.ini
文件(如/etc/php/8.2/fpm/php.ini
),添加或修改以下配置:
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128M # 根據服務器內存調整(建議64-256M)
opcache.max_accelerated_files=4000 # 腳本文件數量上限(建議3000-5000)
opcache.revalidate_freq=2 # 腳本更新檢查頻率(秒)
opcache.fast_shutdown=1 # 快速關閉機制
重啟PHP-FPM或Apache使配置生效:sudo systemctl restart php8.2-fpm
。
2. 使用最新穩定版PHP
新版本PHP通常包含性能優化、安全修復和新特性。通過Ondrej Sur的PPA安裝最新版(支持Ubuntu 22.04及以上):
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-curl # 根據需求安裝擴展
安裝后,用php -v
確認版本,確保Web服務器(如Nginx/Apache)指向新版本。
3. 優化PHP-FPM進程配置
PHP-FPM(FastCGI進程管理器)比傳統mod_php
更高效,需根據服務器負載調整進程參數(以/etc/php/8.2/fpm/pool.d/www.conf
為例):
dynamic
(動態調整,適合波動負載),其次ondemand
(按需啟動,適合低流量);pm = dynamic
pm.max_children = 50 # 最大子進程數(根據內存計算:總內存/單個進程內存,如2G內存≈50個64M進程)
pm.start_servers = 10 # 啟動時的子進程數
pm.min_spare_servers = 5 # 最小空閑進程數(避免頻繁創建)
pm.max_spare_servers = 20 # 最大空閑進程數(避免資源浪費)
pm.max_requests = 500 # 每個子進程處理的最大請求數(防止內存泄漏)
調整后重啟PHP-FPM:sudo systemctl restart php8.2-fpm
。
4. 配置緩存技術(Redis/Memcached)
使用Redis或Memcached緩存數據庫查詢結果、會話數據或常用數據,減少數據庫訪問次數。以Redis為例:
sudo apt install redis-server php-redis
;php.ini
(如/etc/php/8.2/fpm/php.ini
),添加extension=redis.so
;Redis
類存儲和讀取數據(如$redis->set('key', 'value', 3600)
)。5. 優化數據庫連接
php.ini
中啟用:mysqli.allow_persistent = On
、mysqli.max_persistent = 100
(限制最大持久連接數);ProxySQL
)或調整數據庫參數(如innodb_buffer_pool_size
),提升數據庫響應速度。6. 調整PHP配置參數
根據應用需求調整php.ini
中的關鍵參數,避免資源浪費:
memory_limit
:設置為128-256M(根據腳本內存需求調整,避免過大導致內存耗盡);max_execution_time
:設置為30-300秒(根據腳本復雜度調整,避免長時間運行占用資源);post_max_size
/upload_max_filesize
:設置為32-100M(根據上傳文件大小調整,如post_max_size = 50M
、upload_max_filesize = 50M
)。7. 代碼級優化
foreach
替代for
遍歷數組);O(n)
優于O(n2)
);php.ini
的disable_functions
或disable_classes
禁用不必要的擴展(如xdebug
僅在調試時啟用)。8. 監控與持續調優
使用工具監控PHP性能,定位瓶頸:
top
、htop
(查看CPU/內存使用)、php-fpm status
(查看PHP-FPM進程狀態);Blackfire
(性能分析)、New Relic
(應用監控)、Prometheus+Grafana
(可視化監控);/var/log/php8.2-fpm.log
)和慢日志(需開啟slowlog
參數),針對性優化。