OPCache是PHP官方推出的字節碼緩存擴展,可避免重復解析、編譯腳本,顯著提升執行速度。
安裝與配置步驟:
sudo yum install php-opcache(CentOS默認倉庫已包含該擴展);php.ini文件(路徑通常為/etc/php.ini),添加/修改以下參數:[opcache]
zend_extension=opcache.so ; 啟用擴展
opcache.enable=1 ; 開啟OPCache
opcache.memory_consumption=128 ; 分配給OPCache的內存大?。∕B,根據服務器內存調整,建議64-256MB)
opcache.max_accelerated_files=4000 ; 可緩存的腳本文件數量(需覆蓋項目所有PHP文件)
opcache.validate_timestamps=1 ; 生產環境設為0(禁用文件時間戳檢查,提升性能),開發環境設為1(自動更新緩存)
opcache.revalidate_freq=60 ; 文件更新檢查間隔(秒,生產環境可設為300以上)
opcache.fast_shutdown=1 ; 快速關閉機制,減少內存釋放時間
sudo systemctl restart php-fpm。新版本PHP通常包含性能改進、bug 修復及新特性(如PHP 7+的JIT編譯、PHP 8+的性能優化)。
升級步驟:
php -v;sudo yum install epel-release
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm # CentOS 7
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-8.rpm # CentOS 8
sudo yum-config-manager --enable remi-php82
sudo yum update php php-*;sudo systemctl restart nginx php-fpm。PHP-FPM(FastCGI進程管理器)負責管理PHP進程,合理的配置可提升并發處理能力。
關鍵參數調整(編輯/etc/php-fpm.d/www.conf):
pm.max_children:最大子進程數,根據服務器內存計算(公式:可用內存(MB)/單個PHP進程內存(MB),如1GB內存、每個進程100MB,則設為10);pm.start_servers:啟動時的子進程數(建議設為pm.max_children的1/4~1/2);pm.min_spare_servers:最小空閑進程數(避免頻繁創建進程);pm.max_spare_servers:最大空閑進程數(避免占用過多內存)。pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm = dynamic(動態調整進程數,適合大多數場景);sudo systemctl restart php-fpm。頻繁的數據庫查詢是PHP腳本的性能瓶頸之一,使用Memcached或Redis緩存熱點數據可顯著提升速度。
以Redis為例:
sudo yum install redis;sudo systemctl start redis;sudo yum install php-pecl-redis;$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$cacheKey = 'user_list';
if ($data = $redis->get($cacheKey)) {
// 從緩存讀取數據
$userList = json_decode($data, true);
} else {
// 從數據庫查詢數據
$userList = $db->query("SELECT * FROM users")->fetchAll();
// 存入緩存(有效期3600秒)
$redis->set($cacheKey, json_encode($userList), 3600);
}
代碼層面的優化可直接減少資源消耗,提升執行效率:
require_once/include_once:這些語句會檢查文件是否已包含,增加開銷,若確定文件未重復包含,可使用require/include;int、string),減少PHP內部類型檢查的開銷。選擇高性能Web服務器并調整配置,可減少HTTP請求處理時間:
gzip on; gzip_types text/plain text/css application/json application/javascript;);fastcgi_buffers 16 16k; fastcgi_buffer_size 32k;(優化PHP-FPM通信緩沖區);server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
sudo systemctl restart nginx。數據庫查詢慢會直接影響PHP腳本執行速度,需針對性優化:
SELECT *(只查詢所需字段),使用EXPLAIN分析查詢執行計劃(識別全表掃描、索引缺失等問題);query_cache_type=1)或InnoDB緩沖池(innodb_buffer_pool_size,建議設為服務器內存的50%~70%);OPTIMIZE TABLE)、清理無用數據(如過期日志)。通過監控工具定位性能瓶頸,持續調整優化策略:
top(查看CPU/內存使用率)、htop(交互式資源監控)、vmstat(虛擬內存統計)、iostat(磁盤I/O統計);