某專案模組線上效能極差,排查無果。老板要求在不影響現有效能的前提下,記錄該模組所有類方法的執行時間以定位瓶頸。這引出兩大核心挑戰:
xhprof / xhgui專業級效能分析工具,採樣式採集,對效能影響極小(通常 < 5%)。部署步驟:
xhprof 擴展(PECL)xhgui Web 介面存儲 MongoDB/MySQLxhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY)若無法安裝擴展,可實現輕量級攔截:
class Profiler {
public static function wrap($class, $method, $args) {
$start = microtime(true);
$result = call_user_func_array([$class, $method], $args);
$duration = microtime(true) - $start;
// 異步寫入日誌/Redis,避免阻塞
self::asyncLog($class, $method, $duration);
return $result;
}
private static function asyncLog(...) { /* 使用 Swoole/Workerman 或簡單 file_put_contents(FILE_APPEND) */ }
}
配合 runkit 或 uopz 擴展在運行時重寫類方法,實現零代碼修改接入。
支援 PHP 探針,提供分布式追蹤、拓撲圖、慢 SQL 分析,適合微服務架構。
「不影響現有效能」的關鍵在於:採樣而非全量、異步而非同步、專業工具而非手工埋點。