1. 啟用并優化OPcache
OPcache是PHP性能提升的關鍵工具,通過緩存編譯后的字節碼,避免重復解析和編譯,顯著減少腳本執行時間。
sudo apt install php-opcache
安裝(適用于PHP 7.x/8.x)。/etc/php/{version}/fpm/php.ini
(如/etc/php/8.2/fpm/php.ini
),添加或修改以下參數:zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128 # 緩存內存大?。∕B),根據服務器內存調整
opcache.max_accelerated_files=10000 # 緩存文件數量,建議設置為項目文件總數的1.5倍
opcache.revalidate_freq=60 # 文件修改檢查頻率(秒),生產環境可設為0(禁用動態檢查)
opcache.fast_shutdown=1 # 快速關閉,釋放內存
sudo systemctl restart php{version}-fpm
使配置生效。2. 優化PHP-FPM進程管理
PHP-FPM(FastCGI Process Manager)是處理PHP請求的高效方式,合理配置進程參數可平衡性能與資源消耗。
static
:固定進程數(適合負載穩定的環境),配置pm.max_children
即可。dynamic
:動態調整進程數(適合負載波動的環境),需設置:pm = dynamic
pm.max_children = 50 # 最大子進程數(根據服務器內存計算:如2GB內存,每個進程100MB,則設為20)
pm.start_servers = 10 # 啟動時的進程數
pm.min_spare_servers = 5 # 最小空閑進程數
pm.max_spare_servers = 20 # 最大空閑進程數
ondemand
:按需啟動進程(適合請求量小的環境),設置pm.max_children
和pm.process_idle_timeout
(空閑進程存活時間)。request_terminate_timeout = 30s # 請求超時時間,防止長時間運行的腳本占用資源
pm.max_requests = 500 # 每個子進程處理的請求數,超過則重啟(防止內存泄漏)
sudo systemctl restart php{version}-fpm
。3. 使用最新穩定版PHP
新版本PHP通常包含性能改進、安全修復和優化(如PHP 8.x的JIT編譯器提升CPU密集型任務性能)。
sudo add-apt-repository ppa:ondrej/php
(支持PHP 7.4+)。sudo apt update && sudo apt install php8.2 php8.2-fpm php8.2-mysql
(以PHP 8.2為例)。update-alternatives
或sudo update-alternatives --config php
選擇默認版本。4. 配置高效的Web服務器
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 使用Unix Socket(比TCP更快)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
mod_proxy_fcgi
和KeepAlive
,調整MaxClients
(最大客戶端數)和StartServers
(啟動時的服務器數)以匹配服務器資源。5. 引入緩存層減少數據庫負載
數據庫查詢是PHP應用的常見瓶頸,使用緩存可顯著減少數據庫訪問次數。
sudo apt install redis-server
sudo systemctl enable --now redis-server
在PHP代碼中使用Redis擴展(php-redis
)緩存頻繁訪問的數據(如數據庫查詢結果、會話數據)。mysqlnd_ms
)減少連接開銷。6. 代碼級性能優化
7. 監控與持續調優
htop
(查看CPU/內存使用率)、top
(查看進程資源占用)、php-fpm status
(查看PHP-FPM進程狀態)監控系統狀態。slowlog = /var/log/php-fpm/slow.log
),分析慢請求的原因(如慢查詢、復雜邏輯)。pm.max_children
)、OPcache內存大?。?code>opcache.memory_consumption)等參數,適應業務增長。