1. 啟用并配置OPcache(關鍵優化手段)
OPcache是PHP官方推出的字節碼緩存擴展,可避免腳本重復編譯,顯著提升執行效率。在CentOS中,首先通過sudo yum install php-opcache安裝擴展,然后編輯/etc/php.ini文件,添加以下核心配置:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 根據服務器內存調整(如256M)
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000 # 建議值為腳本總數的1.5-2倍
opcache.revalidate_freq=60 # 文件變動后重新驗證的時間間隔(秒)
opcache.fast_shutdown=1
重啟PHP-FPM(sudo systemctl restart php-fpm)使配置生效。對于PHP 7及以上版本,還可開啟opcache.huge_code_pages=1以進一步提升性能(需系統支持HugePages)。
2. 優化PHP-FPM進程管理
PHP-FPM是PHP的進程管理器,合理配置可提高資源利用率。編輯/etc/php-fpm.d/www.conf文件,調整以下參數:
pm.max_children = 50 # 根據服務器內存計算(如2GB內存可設為50,公式:(總內存-系統預留)/單個進程內存)
pm.start_servers = 5 # 啟動時的進程數
pm.min_spare_servers = 5 # 最小空閑進程數
pm.max_spare_servers = 35 # 最大空閑進程數
pm.max_requests = 500 # 每個子進程處理的最大請求數(避免內存泄漏積累)
重啟PHP-FPM服務(sudo systemctl restart php-fpm)使配置生效。
3. 調整PHP配置參數
修改/etc/php.ini文件,優化基礎配置:
memory_limit(如memory_limit = 256M,避免設置過高導致內存耗盡);max_execution_time(如max_execution_time = 300,適用于需要長時間運行的腳本);upload_max_filesize(如upload_max_filesize = 50M)和post_max_size(如post_max_size = 50M);display_errors = Off),并設置error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED,減少日志冗余。4. 使用緩存技術(減少數據庫負載)
引入內存緩存系統(如Redis或Memcached)緩存熱點數據(如數據庫查詢結果、頁面片段),減少重復查詢。以Redis為例:
sudo yum install php-pecl-redis;/etc/php.ini添加extension=redis.so;$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$key = 'user_list';
if (!$data = $redis->get($key)) {
$data = $pdo->query("SELECT * FROM users")->fetchAll(PDO::FETCH_ASSOC);
$redis->set($key, $data, 3600); // 緩存1小時
}
。
5. 優化代碼邏輯
strlen()),可將結果緩存到變量中;int而非string處理數字),減少內部類型檢查開銷;array_map()、array_filter()等內置函數替代foreach循環(內置函數用C語言實現,效率更高);unset()釋放(如處理大型數組后);LIMIT和OFFSET分塊查詢大型表,或用生成器(yield)逐行處理數據,避免內存溢出。6. 升級PHP版本
新版本PHP通常包含性能改進和新特性(如PHP 8的JIT編譯)。使用sudo yum update php升級到最新穩定版本(如PHP 8.3),升級前需備份代碼并通過測試環境驗證兼容性。
7. 優化Web服務器配置
worker_processes為CPU核心數(auto),啟用Gzip壓縮(gzip on; gzip_types text/plain text/css application/json),配置PHP-FPM socket連接(fastcgi_pass unix:/run/php-fpm/php-fpm.sock;);mod_deflate壓縮,調整MaxClients(如MaxClients 256)和KeepAliveTimeout(如KeepAliveTimeout 5),減少連接開銷。8. 調整內核參數
編輯/etc/sysctl.conf文件,優化系統內核參數:
vm.swappiness = 10 # 減少swap使用(值越低越優先使用物理內存)
net.ipv4.tcp_fin_timeout = 30 # TCP連接超時時間(秒)
net.ipv4.tcp_max_syn_backlog = 4096 # SYN隊列長度
net.core.somaxconn = 1024 # 監聽隊列長度
執行sudo sysctl -p使配置生效。
9. 監控與分析性能
使用工具定位性能瓶頸: