xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir = /tmp/xdeubg/profiler
xdebug.profiler_enalbe = 0:不讓 Xdebug Profiler 自動啟動,否則在執行其它 PHP 程式時也會自動啟動(例如 composer 或 phpunit)
xdebug.profiler_enable_trigger = 1:在 HTTP REQUEST 或在 COOKIE 裡加入 XDEBUG_PROFILER=1,即可在單個請求中啟動 Xdebug Profiler
xdebug.profiler_output_dir:指定 profiling 的結果會放到哪個資料夾,profiling 的資料通常不小,記得指定一個具備足夠空間的磁碟
Xdebug Profiler 生成的結果是 CacheGrind 格式,我個人是偏好使用 KCacheGrind。
XHProf
XHProf 原本是 Facebook 開源的 Profiling 工具,然而它並沒有跟著 PHP 7 一起釋出新版。
目前由 Tideways Fork 出來的版本成為主流(Tideways 原本就是做 Profiling/Tracing as a Service 服務),雖然 Tideways 屬於商業導向的公司,但其 XHProf 仍是開源使用,只要不使用他們的服務其實是不會收費的。
詳細的安裝及使用方式可以參閱 tideways/php-xhprof-extension
XHProf 所產生的結果是自有的結構,通常會依靠 XHGUI 來做分析
與 Xdebug 相比,它收集的資料較少,但是因為效率比較高,所以可以在正式環境中使用。
Blackfire
Blackfire 由 Symfony 主導,它可以收集的資料量約在 Xdebug 與 XHProf 之間,但是它的免費使用僅有開發版本(最便宜的每月 29 美金,需年付)
Blackfire 因為經過多次版本更迭,不確定我的記憶是否與目前有所出入,如有出入以官方為主。
Blackfire 會在作業系統中安裝兩個東西:profiler php extension 與 agent。利用 profiler extension 收集相關資訊後再使用 agent 將資料傳回 blackfire 做可視化,同時有提供 chrome extension 可以即時操作。
Swoole Tracker
這個是我昨天在看 Swoole 4.3 的新版資料時偶然發現的,該系統由 Swoole 開發團隊所建置,定位上有點類似於 Blackfire,在沒有要求 clickhouse 支援的情況下可以免費使用(要求 clickhouse 支援的話一年是 5 萬人民幣)
Swoole Tracker 以 XHProf 為基礎並經過一些魔改以適應 swoole(上面寫的所有 profiler 都無法用於 swoole)。
詳細的介紹可以直接參閱官方的 Demo 影片:https://www.swoole-cloud.com/tracker.html
在 Modern PHP 一書中對於 Profiler 還有提到 New Relic,不過因為我沒使用過所以略過不提。
事實上,當時 Facebook 在 PHP7 釋出之後遲未更新 XHProf 我還以為這個 profiler 就被放棄了。所幸有 tideways 接下維護的工作,至於如果有一天 tideways 倒閉,是否還有其它人願意接手就不得而知了。
Blackfire 因為後面由 Symfony 撐腰,而且已經活躍了五、六年了應該算是比較穩定的選擇;Swoole Tracer 算是後起之秀的新型服務,我很期待它未來的發展。