操作碼快取解決編譯開銷,但無法揭示執行期瓶頸:慢 SQL、低效演算法、記憶體洩漏、過度物件建立。分析器能量測每個函數呼叫次數、耗時、記憶體,精準定位熱點。
# Linux (PECL)
pecl install xdebug
# 或編譯安裝
wget https://xdebug.org/files/xdebug-3.2.0.tgz
tar xzf xdebug-3.2.0.tgz
cd xdebug-3.2.0
phpize
./configure --enable-xdebug
make && sudo make install
php.ini 設定(僅開發/測試環境啟用):
zend_extension=xdebug.so
xdebug.mode=profile,develop
xdebug.output_dir=/tmp/xdebug_profiler
xdebug.start_with_request=trigger
xdebug.trigger_value=XDEBUG_PROFILE
# 瀏覽器安裝 Xdebug Helper 擴充,點擊即可觸發分析
/tmp/xdebug_profiler 產生 cachegrind.out.xxx| 現象 | 可能原因 | 對策 |
|---|---|---|
| PDO::query 耗時高 | 慢 SQL、缺索引、N+1 查詢 | EXPLAIN 分析、加索引、Eager Loading |
| 大量物件建立 | 迴圈 new Entity、Hydration 開銷 | DTO/陣列替代、批次處理、生成器 |
| 記憶體持續增長 | 循環引用、大陣列殘留、快取未清 | unset、WeakReference、分批處理 |
| 自訂函數自耗時高 | 演算法複雜度高、重複運算 | 快取結果、改用內建函數、優化演算法 |
Xdebug 會顯著降低效能(約 2-10x),嚴禁生產環境常駐啟用。生產環境可用:
Xdebug 3 + PhpStorm/VS Code:
Listen for Debug ConnectionsXDEBUG_SESSION Cookie