1. 啟用并優化OPcache(PHP字節碼緩存)
OPcache是PHP內置的關鍵性能擴展,可緩存編譯后的腳本字節碼,避免重復編譯,顯著提升執行速度。
sudo yum install php-opcache
。/etc/php.ini
,添加或修改以下參數(根據服務器內存調整):[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1 # 允許CLI腳本使用OPcache
opcache.memory_consumption=128 # 分配給OPcache的內存(MB),建議128-256MB
opcache.interned_strings_buffer=8 # 內部字符串緩沖區大?。∕B)
opcache.max_accelerated_files=4000 # 可緩存的腳本文件數量(根據項目文件數調整)
opcache.revalidate_freq=60 # 腳本更新檢查頻率(秒),生產環境可設為0(禁用動態檢查)
opcache.fast_shutdown=1 # 快速關閉,減少內存釋放時間
sudo systemctl restart php-fpm
。2. 優化PHP-FPM進程管理
PHP-FPM(FastCGI進程管理器)是CentOS下PHP的高效處理方式,合理配置可提升資源利用率。
/etc/php-fpm.d/www.conf
(默認路徑),設置以下參數(根據服務器CPU核心數和內存調整):pm = dynamic # 動態進程管理模式(推薦)
pm.max_children = 50 # 最大子進程數(建議:(可用內存-1G)/單個進程內存,如2G內存可設為50)
pm.start_servers = 5 # 啟動時的子進程數
pm.min_spare_servers = 5 # 最小空閑子進程數(避免頻繁創建進程)
pm.max_spare_servers = 35 # 最大空閑子進程數(避免占用過多內存)
pm.max_requests = 500 # 每個子進程處理的最大請求數(防止內存泄漏)
sudo systemctl restart php-fpm
。3. 升級到最新穩定版PHP
新版本PHP通常包含性能優化和新特性(如PHP 8的JIT編譯),能顯著提升運行速度。
sudo yum update -y
sudo yum install -y php php-mysqlnd php-gd php-mbstring # 安裝常用擴展
php -v
確認升級成功。4. 配置Web服務器(Nginx/Apache)優化
Web服務器的配置直接影響PHP請求的處理效率。
/etc/nginx/nginx.conf
中添加:gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
/etc/nginx/conf.d/your-site.conf
)添加:location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
}
mod_deflate
壓縮:在/etc/httpd/conf/httpd.conf
中添加:<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json application/javascript
</IfModule>
KeepAlive On
、MaxKeepAliveRequests 100
、KeepAliveTimeout 65
。sudo systemctl restart nginx
,Apache用sudo systemctl restart httpd
。5. 使用緩存系統(Redis/Memcached)
緩存頻繁訪問的數據(如數據庫查詢結果、會話數據),減少數據庫負載和PHP計算時間。
sudo yum install -y redis
,啟動服務:sudo systemctl start redis
。sudo yum install -y php-redis
,代碼示例:$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$data = $redis->get('cached_data');
if (!$data) {
$data = $mysqli->query('SELECT * FROM large_table')->fetch_all(MYSQLI_ASSOC);
$redis->set('cached_data', $data, 3600); // 緩存1小時
}
php.ini
:session.save_handler = redis
、session.save_path = "tcp://127.0.0.1:6379"
。6. 代碼級優化
優化PHP代碼邏輯,減少不必要的資源消耗。
strlen()
),提前計算結果。SELECT *
(只查詢所需字段),使用預處理語句防止SQL注入。php.ini
中設置output_buffering = On
,減少HTTP請求次數。7. 禁用不必要的PHP擴展
禁用未使用的擴展可減少內存占用和啟動時間。
disable_functions
參數,添加不需要的高風險函數(生產環境):disable_functions = exec, passthru, shell_exec, system, proc_open
php.ini
或/etc/php.d/
目錄下的擴展文件(如mysql.ini
),注釋掉不需要的擴展(如extension=mysql.so
)。8. 監控與持續調優
使用工具監控PHP性能,定位瓶頸并針對性優化。
top
、htop
查看CPU和內存使用情況,vmstat 1
查看系統級性能指標。www.conf
中啟用pm.status_path = /status
,通過Nginx/Apache訪問/status
查看進程狀態。