1. 安裝并配置OPcache加速腳本執行
OPcache是PHP的關鍵加速擴展,通過緩存編譯后的字節碼,避免重復解析和編譯,顯著提升腳本執行速度。安裝命令:sudo apt install php-opcache(根據PHP版本調整,如php8.2-opcache)。配置php.ini(路徑通常為/etc/php/{version}/fpm/php.ini或/etc/php/{version}/cli/php.ini),添加以下參數:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=64 # 緩存內存大?。∕B),根據服務器內存調整
opcache.max_accelerated_files=4000 # 最大加速文件數,建議設置為項目中PHP文件總數的1.5倍
opcache.revalidate_freq=2 # 文件修改后重新驗證的間隔(秒)
opcache.fast_shutdown=1 # 快速關閉機制,減少內存釋放時間
重啟PHP-FPM使配置生效:sudo systemctl restart php{version}-fpm。
2. 優化PHP-FPM進程管理
PHP-FPM(FastCGI Process Manager)比傳統的mod_php更高效,需根據服務器資源調整進程參數。編輯/etc/php/{version}/fpm/pool.d/www.conf,重點配置以下參數:
dynamic(動態調整進程數,適合負載波動大的環境);(服務器總內存 - 系統預留內存) / 單個PHP進程內存(如服務器有8GB內存,單個PHP進程約占用100MB,則設置為70-80);pm.max_children的1/4-1/2;pm.max_spare_servers:空閑進程的最小/最大數量,保持足夠的空閑進程應對突發請求,避免頻繁創建/銷毀進程;3. 升級到最新穩定版PHP
新版本PHP通常包含性能改進、安全修復和優化(如PHP 8.x引入的JIT編譯器)。通過Ondrej Sur的PPA添加最新版本:
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-gd # 根據項目需求安裝擴展
安裝后,禁用舊版本并啟用新版本:
sudo a2dismod php7.x # 禁用舊版本(如7.4)
sudo a2enmod php8.2 # 啟用新版本
sudo systemctl restart apache2 # 或php-fpm
4. 使用緩存技術減少數據庫負載
引入內存緩存(如Redis或Memcached)緩存頻繁訪問的數據庫查詢結果、會話數據等,減少數據庫連接和查詢次數。以Redis為例:
sudo apt install redis-server;sudo apt install php-redis;php.ini中添加extension=redis.so);$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$data = $redis->get('cached_data');
if (!$data) {
$data = $db->query("SELECT * FROM large_table")->fetchAll(); // 數據庫查詢
$redis->set('cached_data', $data, 3600); // 緩存1小時
}
5. 優化PHP配置參數
調整php.ini中的關鍵參數,平衡性能與資源消耗:
upload_max_filesize:設置為合理值(如32M),適應文件上傳需求;6. 優化Web服務器配置
選擇高性能Web服務器(如Nginx)替代Apache,或優化Apache配置:
/etc/nginx/sites-available/default,添加PHP-FPM處理規則:location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php{version}-fpm.sock; # 使用Unix Socket(比TCP更快)
}
mod_proxy_fcgi并配置SetHandler "proxy:unix:/var/run/php/php{version}-fpm.sock|fcgi://localhost",替代mod_php。7. 代碼級優化減少資源消耗
unset()函數釋放不再需要的變量(如大型數組、數據庫結果集);yield生成器或array_chunk()處理大型數據集,避免一次性加載到內存;array_map()替代foreach循環),內置函數通常用C語言實現,效率更高。8. 監控與持續調優
使用工具監控PHP和服務器性能,識別瓶頸并針對性優化:
htop(查看CPU/內存使用)、iotop(查看磁盤I/O)、vmstat(查看系統整體性能);www.conf中啟用pm.status_path = /status,通過sudo curl http://localhost/status查看進程數、請求數等指標;request_slowlog_timeout = 5s,slowlog = /var/log/php-fpm/slow.log),使用grep或工具(如Blackfire)分析慢腳本,定位性能瓶頸。