首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 加速器選擇指南:從 PHP Accelerator 到 OPcache

     編輯:PHP 相關知識

PHP 效能優化關鍵:Opcode 快取機制演進

早期 PHP 加速器(如 PHP Accelerator、Turck MMCache、eAccelerator、XCache、APC)透過快取編譯後的 Opcode 避免重複解析編譯,大幅提升效能。PHP 5.5 起內建 OPcache,取代所有第三方加速器成為標準方案。

歷史加速器設定範例(僅供參考)

; php.ini 範例 (PHP Accelerator 1.3)
zend_extension = /usr/local/lib/php_accelerator_1.3.3r2.so
phpa = on
phpa.tweaks = on
phpa.cache_dir = /tmp
phpa.file_perms = 400
phpa.cache_file_prune_period = 1h
phpa.cache_file_ttl = 1d
phpa.shm_size = 10
phpa.shm_key = 0xc0deb00
phpa.shm_perms = 666
phpa.shm_user = nobody
phpa.shm_group = nobody
phpa.shm_release_at_exit = on
phpa.shm_stats_check_period = 5m
phpa.shm_ttl = 12h
phpa.shm_max_processes = 512
phpa.shm_lock_threshold0 = 10

重新載入 Apache:apachectl graceful

現代標準:OPcache 設定最佳實踐

; php.ini (PHP 7.4+ 推薦)
[opcache]
zend_extension=opcache.so          ; Windows: php_opcache.dll
opcache.enable=1
opcache.enable_cli=1               ; CLI 模式也啟用(長期執行腳本受益)
opcache.memory_consumption=256     ; 共享記憶體大小 (MB),視專案大小調整
opcache.interned_strings_buffer=16 ; 內部字串緩衝區
opcache.max_accelerated_files=20000 ; 最大快取檔案數,設定大於專案總 .php 檔數
opcache.revalidate_freq=2          ; 檢查檔案更新頻率(秒),開發環境設 0,生產 2-60
opcache.fast_shutdown=1            ; 快速關閉(PHP 7.2+ 已內建優化)
opcache.save_comments=1            ; 保留註解(註解解析器/框架需要)
opcache.enable_file_override=0     ; 不覆蓋 file_exists 等函數行為
; opcache.validate_timestamps=1    ; 生產環境建議 1,配合 deploy 後重啟 php-fpm 或 opcache_reset()
; opcache.file_cache=/tmp/opcache  ; 檔案快取備援(PHP 7.0+)
; opcache.file_cache_only=0

關鍵參數說明

參數建議值影響
memory_consumption128-512 MB過小導致快取滿載頻繁清除,過大浪費記憶體
max_accelerated_files> 專案 .php 總數質數效能最佳(如 20011, 50021)
revalidate_freq0 (開發) / 10-60 (生產)0 即時生效但有效能開銷;生產環境部署後需重啟或呼叫 opcache_reset()
validate_timestamps1 (生產)關閉需手動清除快取,適合不可變部署(Docker 映像)

監控與除錯工具

  • OPcache 狀態頁:opcache-status 或 OpCacheGUI
  • 命令列檢查:php -r "print_r(opcache_get_status());"
  • 關鍵指標:hit_rate (命中率) 應 > 90%,memory_usage.used_memory < free_memory。

常見問題與解決

  1. 部署後程式碼未更新:重啟 PHP-FPM (systemctl reload php-fpm) 或呼叫 opcache_reset()。
  2. 快取衝突導致異常:檢查 opcache.save_comments、opcache.enable_file_override 設定。
  3. 記憶體不足:增加 memory_consumption 或減少 max_accelerated_files。

結語

PHP Accelerator 等早期專案已完成歷史使命。現代 PHP 專案請直接啟用並調校 OPcache,搭配 Composer 自動載入最佳化(composer dump-autoload -o)、JIT(PHP 8.0+)即可獲得極致效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved