1. 安裝并配置OPcache(關鍵優化手段)
OPcache是PHP內置的字節碼緩存擴展,可避免重復編譯腳本,顯著提升執行效率。
php-opcache包(適用于多數CentOS PHP版本):sudo yum install php-opcache
/etc/php.ini,添加或修改以下參數(根據服務器內存調整):[opcache]
zend_extension=opcache.so ; 啟用擴展
opcache.enable=1 ; 開啟OPcache
opcache.enable_cli=1 ; CLI模式下也啟用
opcache.memory_consumption=128 ; 共享內存大?。∕B),建議128-256MB
opcache.interned_strings_buffer=8 ; 內部字符串緩存大?。∕B)
opcache.max_accelerated_files=4000 ; 可緩存的腳本文件數量
opcache.revalidate_freq=60 ; 文件修改檢查間隔(秒),生產環境建議60-300秒
opcache.fast_shutdown=1 ; 快速關閉,減少內存釋放時間
sudo systemctl restart php-fpm ; 若使用PHP-FPM
# 或 sudo systemctl restart nginx/apache ; 若使用Web服務器
2. 優化PHP-FPM配置(提升進程管理效率)
PHP-FPM是PHP FastCGI進程管理器,合理配置可平衡內存使用與并發處理能力。
/etc/php-fpm.d/www.conf(路徑可能因發行版略有差異)。dynamic(動態調整進程數,適合大多數場景):pm = dynamic
pm.max_children = 50 ; 最大子進程數((可用內存-1G)/單個進程內存,如2G內存約分配1G給PHP)
pm.start_servers = 5 ; 啟動時的進程數(建議為max_children的1/10)
pm.min_spare_servers = 5 ; 最小空閑進程數(避免頻繁創建進程)
pm.max_spare_servers = 35 ; 最大空閑進程數(避免內存浪費)
pm.max_requests = 500 ; 每個子進程處理500個請求后重啟
rlimit_files = 10240 ; 提高文件描述符上限
sudo systemctl restart php-fpm
3. 調整PHP配置文件(php.ini)
優化基礎配置以適應應用需求,減少不必要的資源消耗。
memory_limit = 256M ; 腳本最大內存(根據應用調整,如大型應用可設為512M)
max_execution_time = 300 ; 腳本最大執行時間(秒,生產環境建議30-300秒)
display_errors = Off
log_errors = On
error_log = /var/log/php-fpm/error.log
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
upload_max_filesize = 50M
post_max_size = 50M
output_buffering = On
implicit_flush = Off
4. 代碼級優化(從根源提升性能)
優化代碼邏輯可顯著減少資源消耗,提升響應速度。
// 示例:使用Redis緩存
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$data = $redis->get('cached_key');
if (!$data) {
$data = $db->query("SELECT * FROM large_table"); // 數據庫查詢
$redis->setex('cached_key', 3600, serialize($data)); // 緩存1小時
}
SELECT *(只查詢所需字段),使用JOIN替代子查詢,避免N+1查詢問題。5. 使用高效的Web服務器(提升靜態資源處理能力)
Nginx比Apache更適合處理高并發靜態請求,建議作為前端服務器。
sudo yum install nginx
/etc/nginx/conf.d/example.conf):server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404; ; 嘗試直接訪問文件,不存在則返回404
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm/www.sock; ; 與PHP-FPM通信的socket
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
sudo systemctl restart nginx
6. 啟用JIT編譯(PHP 8+顯著提升性能)
PHP 8及以上版本支持JIT(Just-In-Time)編譯,可將部分代碼編譯為機器碼,提升執行速度。
php -v
/etc/php.ini,添加以下配置:[opcache]
opcache.jit_buffer_size=100M ; JIT緩沖區大?。ǜ鶕却嬲{整)
opcache.jit=1235 ; 推薦配置(1=啟用,2=函數級,3=方法級,5=全局)
sudo systemctl restart php-fpm
7. 監控與調優(持續優化性能)
使用工具監控PHP性能,及時發現瓶頸。
top、htop查看CPU、內存使用情況;vmstat 1查看系統整體性能。www.conf中開啟狀態頁,通過Nginx訪問查看進程狀態:pm.status_path = /status ; 在www.conf中添加
Nginx配置:location ~ ^/(status|ping)$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
allow 127.0.0.1;
deny all;
}
訪問http://example.com/status查看狀態(需替換為實際域名)。8. 其他優化建議
php.ini中通過disable_functions禁用可能被惡意利用的函數(如exec、passthru):disable_functions = exec,passthru,shell_exec,system
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 6; ; 壓縮級別(1-9)