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

PHP 使用 APC 緩存優化效能完整指南

     編輯:PHP 綜合知識

什麼是 APC?

Alternative PHP Cache (APC) 是一個免費、開源的 PHP 擴展,專門用於緩存和優化 PHP 的中間代碼 (opcode)。透過將編譯後的腳本存放在共享記憶體中,APC 能夠省去每次請求都重新解析、編譯的開銷,大幅提升 PHP 應用的執行速度。

Windows 環境下的前置需求

在 Windows 系統上運行 APC 時,必須確保存在 c:\tmp 目錄,且該目錄對 Web 服務器進程 (如 IIS 的 IUSR 或 Apache 的 daemon) 具有寫入權限,否則緩存寫入會失敗。

安裝步驟

  1. 下載與 PHP 版本、執行緒安全性 (TS/Non-TS) 相符的 php_apc.dll。
  2. 將 DLL 放入 PHP 的 ext 目錄。
  3. 在 php.ini 中啟用擴展:extension=php_apc.dll (PHP 5.3+) 或 zend_extension_ts=... (舊版)。
  4. 重啟 Web 服務器,透過 phpinfo() 確認 APC 區塊出現。

核心配置指令詳解

以下列出生產環境常用的關鍵設定,建議根據流量與記憶體大小調整:

指令建議值說明
apc.enabledOn總開關,關閉即停用 APC。
apc.shm_size128M~256M每個共享記憶體區塊大小,視專案程式碼量而定。
apc.num_files_hint2048~4096預估會被緩存的不同檔案數,避免重新分配哈希表。
apc.ttl7200 (2小時)緩存條目存活秒數,0 為永不過期 (不建議,易導致記憶體耗盡)。
apc.user_ttl7200用戶緩存 (apc_store) 的 TTL。
apc.gc_ttl3600垃圾回收列表中條目最大存活時間,防止舊版本殘留。
apc.statOff (生產) / On (開發)是否每請求檢查腳本修改時間。生產環境關閉可大幅提升效能,但部署後需重啟服務器。
apc.write_lockOn高併發下防止多進程同時編譯同一檔案造成競爭條件。
apc.max_file_size1M單一檔案超過此大小不緩存,避免大檔案佔滿共享記憶體。
apc.filters""正則過濾,例如 "+/var/www/app/*,-/var/www/app/cache/*" 僅緩存應用核心代碼。
apc.enable_cliOffCLI 模式通常不需要 opcode 緩存,關閉可節省記憶體。

常見坑點與最佳實踐

  • 部署流程:生產環境設 apc.stat=Off 時,每次發布新代碼必須 重啟 PHP-FPM / Apache 或發送 SIGUSR2 信號讓 APC 重新掃描,否則舊代碼會持續被執行。
  • 記憶體監控:定期檢視 apc.php 狀態頁,關注 Free memory 與 Fragmentation,碎片率超過 20% 應考慮增大 apc.shm_size 或重啟服務。
  • 用戶緩存:APC 也提供 apc_store()/apc_fetch() 供應用層資料緩存,適合存放熱門查詢結果、配置陣列等,但注意總大小受 apc.shm_size 限制。
  • PHP 5.5+ 替代方案:PHP 5.5 內建 Zend OPcache,效能更優、維護更積極,新專案建議直接使用 OPcache,APC 僅適用於 PHP 5.4 及以下舊專案維護。

快速驗證配置是否生效

<?php
echo 'APC 載入: ', extension_loaded('apc') ? '是' : '否', "\n";
if (extension_loaded('apc')) {
    $info = apc_cache_info();
    echo '共享記憶體大小: ', $info['memory_size'], " bytes\n";
    echo '已用: ', $info['memory_size'] - $info['free_memory'], " bytes\n";
    echo '命中率: ', round($info['num_hits'] / ($info['num_hits'] + $info['num_misses']) * 100, 2), "%\n";
}
?>

將上述腳本放在 Web 目錄訪問,即可即時掌握 APC 運行狀態。

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