溫馨提示×

Ubuntu PHP如何提升執行速度

小樊
43
2025-10-16 08:32:34
欄目: 編程語言

1. 安裝并啟用OPcache擴展
OPcache是PHP內置的字節碼緩存擴展,可避免重復編譯PHP腳本,顯著提升執行速度。Ubuntu上默認包含該擴展,需通過以下步驟啟用:

  • 安裝擴展:sudo apt update && sudo apt install php-opcache(根據PHP版本調整包名,如php8.2-opcache)。
  • 配置參數:編輯/etc/php/{version}/fpm/php.ini(PHP-FPM)或/etc/php/{version}/cli/php.ini(CLI),添加/修改以下配置:
    [opcache]
    zend_extension=opcache.so
    opcache.enable=1
    opcache.memory_consumption=128  # 緩存內存大?。∕B),根據服務器內存調整
    opcache.max_accelerated_files=10000  # 最大緩存文件數
    opcache.revalidate_freq=60  # 腳本更新檢查間隔(秒)
    opcache.enable_cli=1  # CLI模式下也啟用
    
  • 重啟服務:sudo systemctl restart php{version}-fpm(如php8.2-fpm)。

2. 使用最新穩定版PHP
新版本PHP通常包含性能改進、bug修復和優化(如JIT編譯器)。通過Ondrej Sur的PPA安裝最新版:

  • 添加PPA:sudo add-apt-repository ppa:ondrej/php
  • 更新并安裝:sudo apt update && sudo apt install php8.2 php8.2-cli php8.2-fpm php8.2-mysql(按需選擇擴展)。
  • 切換PHP版本:sudo update-alternatives --config php。

3. 優化PHP-FPM配置
PHP-FPM(FastCGI進程管理器)比傳統mod_php更高效,需調整進程池參數以匹配服務器資源:

  • 編輯/etc/php/{version}/fpm/pool.d/www.conf,調整以下關鍵參數:
    pm = dynamic  # 動態進程管理模式(適合大多數場景)
    pm.max_children = 50  # 最大子進程數(根據內存計算:總內存/單個進程內存)
    pm.start_servers = 10  # 啟動時的進程數(建議為CPU核心數的2-4倍)
    pm.min_spare_servers = 5  # 最小空閑進程數
    pm.max_spare_servers = 20  # 最大空閑進程數
    pm.max_requests = 500  # 單個進程處理的最大請求數(防止內存泄漏)
    
  • 監聽方式:優先使用Unix Socket(性能更高),編輯fastcgi_pass為:
    fastcgi_pass unix:/run/php/php{version}-fpm.sock;
    
  • 重啟服務:sudo systemctl restart php{version}-fpm。

4. 配置緩存技術(OPcache+Redis/Memcached)

  • OPcache:已在上文配置,用于緩存PHP字節碼,減少編譯開銷。
  • Redis/Memcached:作為數據緩存層,緩存數據庫查詢結果、會話數據等,減少數據庫訪問次數。
    • 安裝Redis:sudo apt install redis-server php-redis(PHP擴展)。
    • 配置Redis:編輯/etc/php/{version}/fpm/php.ini,添加:
      [redis]
      extension=redis.so
      redis.host=127.0.0.1
      redis.port=6379
      
    • 測試連接:redis-cli ping(返回PONG表示成功)。

5. 優化數據庫交互

  • 使用持久連接:減少數據庫連接建立/關閉的開銷,在php.ini中設置:
    mysqli.allow_persistent=On
    mysqli.max_persistent=100
    
  • 優化查詢:為常用查詢字段添加索引,避免SELECT *,使用預處理語句防止SQL注入。
  • 連接池:通過PDOMySQLi的連接池功能復用數據庫連接。

6. 代碼層面優化

  • 減少全局變量:全局變量會增加內存占用,盡量使用局部變量。
  • 使用高效數據結構:如用數組代替對象(若不需要面向對象特性),用生成器(yield)處理大數據集(避免一次性加載到內存)。
  • 及時釋放資源:使用unset()釋放不再需要的變量,關閉數據庫連接($conn->close())。
  • 代碼分析:使用XdebugBlackfire定位性能瓶頸(如慢函數、重復計算)。

7. 內核與系統優化

  • 調整文件描述符限制:增加系統允許的最大文件描述符數(默認1024可能不足),編輯/etc/security/limits.conf,添加:
    * soft nofile 65535
    * hard nofile 65535
    
  • 優化TCP參數:編輯/etc/sysctl.conf,添加:
    net.core.somaxconn = 1024
    net.ipv4.tcp_tw_reuse = 1
    
    應用配置:sudo sysctl -p。

8. 監控與持續調優

  • 監控工具:使用htop(查看CPU/內存使用)、vmstat(查看系統IO)、Prometheus+Grafana(可視化監控PHP-FPM指標)。
  • 慢日志分析:開啟PHP-FPM慢日志,定位執行慢的腳本,編輯/etc/php/{version}/fpm/pool.d/www.conf
    slowlog = /var/log/php-fpm/slow.log
    request_slowlog_timeout = 5s  # 超過5秒的請求記錄到慢日志
    
    分析日志:grep "slowlog" /var/log/php-fpm/slow.log。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女