溫馨提示×

如何提升Ubuntu上PHP執行速度

小樊
42
2025-09-25 07:35:18
欄目: 編程語言

1. 安裝并啟用OPcache擴展
OPcache是PHP內置的字節碼緩存擴展,可顯著減少腳本編譯時間,提升重復請求的執行效率。安裝命令(以Ubuntu 22.04+為例):

sudo apt update && sudo apt install php-opcache

編輯php.ini(路徑可通過php --ini查看,如/etc/php/8.2/fpm/php.ini),添加或修改以下配置:

[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128  # 緩存內存大?。∕B),根據服務器內存調整
opcache.max_accelerated_files=10000  # 緩存文件數量上限
opcache.revalidate_freq=2  # 腳本修改后重新驗證頻率(秒)
opcache.fast_shutdown=1  # 快速關閉機制,提升內存回收效率

重啟PHP服務(如使用PHP-FPM):

sudo systemctl restart php8.2-fpm

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

sudo add-apt-repository ppa:ondrej/php
sudo apt update

安裝指定版本(如PHP 8.2):

sudo apt install php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-curl

切換Web服務器(如Nginx/Apache)的PHP模塊至新版本,并重啟服務。

3. 優化PHP-FPM進程配置
PHP-FPM(FastCGI進程管理器)比傳統mod_php更高效,需根據服務器資源調整進程參數(以/etc/php/8.2/fpm/pool.d/www.conf為例):

  • 進程管理模式:優先選擇dynamic(動態調整進程數,適合負載波動場景);
  • 核心參數
    pm = dynamic
    pm.max_children = 50  # 最大子進程數(根據內存計算:總內存/單個進程內存,如16GB內存/256MB≈60)
    pm.start_servers = 10  # 啟動時的進程數(建議為max_children的1/5-1/4)
    pm.min_spare_servers = 5  # 最小空閑進程數(避免頻繁創建進程)
    pm.max_spare_servers = 20  # 最大空閑進程數(避免內存浪費)
    pm.max_requests = 1000  # 每個子進程處理的最大請求數(防止內存泄漏)
    

調整后重啟PHP-FPM:

sudo systemctl restart php8.2-fpm

4. 配置緩存技術(Redis/Memcached)
使用Redis或Memcached緩存頻繁訪問的數據庫查詢結果、會話數據或頁面片段,減少數據庫負載。以Redis為例:

sudo apt install php-redis redis-server

編輯php.ini啟用擴展:

extension=redis.so

重啟PHP服務后,在代碼中使用Redis緩存(示例):

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$key = 'cached_data_key';
if ($data = $redis->get($key)) {
    echo $data;  // 使用緩存數據
} else {
    $data = fetchDataFromDB();  // 從數據庫獲取數據
    $redis->setex($key, 3600, $data);  // 緩存1小時
    echo $data;
}

5. 優化數據庫交互

  • 使用持久連接:減少數據庫連接建立/銷毀的開銷(php.ini中設置):
    mysqli.allow_persistent = On
    mysqli.max_persistent = 100
    
  • 優化查詢語句:為常用查詢字段添加索引,避免SELECT *,使用預處理語句防止SQL注入;
  • 調整連接配置:如MySQL的wait_timeout(默認8小時),避免閑置連接占用資源。

6. 代碼級性能優化

  • 減少全局變量:全局變量會增加內存占用和查找時間,盡量使用局部變量;
  • 優化循環結構:避免在循環內執行耗時操作(如數據庫查詢、文件IO);
  • 使用高效函數:如用str_replace替代正則表達式(當不需要復雜匹配時);
  • 內存管理:及時釋放不再使用的變量(unset()),尤其是大數組。

7. 監控與調優

  • 日志分析:開啟PHP-FPM慢日志,定位執行慢的腳本(www.conf中設置):
    slowlog = /var/log/php-fpm/slow.log
    request_slowlog_timeout = 5s  # 超過5秒的請求記錄到慢日志
    
    使用grep分析慢日志:
    grep -i "slow" /var/log/php-fpm/slow.log
    
  • 實時監控:使用htop(查看CPU/內存使用)、vmstat(查看系統IO)、php-fpm-status(查看PHP-FPM進程狀態)等工具監控服務器狀態;
  • 壓力測試:使用ab(Apache Benchmark)或wrk模擬高并發請求,評估優化效果:
    ab -n 1000 -c 100 http://yourdomain.com/
    

8. 其他優化建議

  • 靜態文件分離:使用Nginx/Apache處理靜態文件(圖片、CSS、JS),減輕PHP-FPM負擔;
  • 啟用Gzip壓縮:減少傳輸數據量(php.ini中設置):
    zlib.output_compression = On
    zlib.output_compression_level = 6  # 壓縮級別(1-9)
    
  • 負載均衡:若單臺服務器無法滿足需求,可使用Nginx或HAProxy將流量分發到多臺服務器。

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