Xdebug 是一套滿好用的 php debug 工具,這次拿它來做 profiling 的動作
因為開發的專案發現會有效能問題,但是不確定真的的問題點,與其瞎子摸象,不如透過工具找出真正的問題所在!!
 
先講結論~~~ 原來 DB 效能比我想像的要好,反而是 Disk I/O 比我想像的要差,就連 file_exists, is_dir,甚至 include / include_once / reqire / require_once 這類的動作都會造成效能問題!!! 
所以把檔案拆太破碎看來不是件好事情!!!
  • 安裝 XDebug
  • 下載 xdebug.dll
    先到這邊 http://xdebug.org/download.php 下載你適合你環境的 xdebug
    要注意你所使用的 PHP 版本, 32/64 位元以及是否為 TS (thread safe, 如果是 apache 就勇敢的選擇 ts 吧)
  • 設定 php.ini
    增加以下設定
    extension=php_xdebug.dll
    zend_extension_ts="C:\AppServ\php5\ext\php_xdebug.dll"
    [XDebug]
    xdebug.profiler_enable=0
    xdebug.profiler_enable_trigger=1
    xdebug.profiler_output_dir=C:\AppServ\www\xdebug
    
    這邊把 profiler_enable 設為 0 是為了不要每次都產,而是有設定動作時才產
  • 啟用 Xdebug profiler
    只要透過 GET / POST 或是 COOKIE 的方式增加 XDEBUG_PROFILE=1 就可以了
    最簡單的方式就是
  • 查詢結果
    當你這樣使用之後就會發現,在  xdebug.profiler_output_dir 所設定的目錄 (e.g: C:\AppServ\www\xdebug) 就會出現一個檔案
    但是這個檔案看不太懂,所以我們就需要一些其他工具囉
     
    WinCacheGrind 是我自己覺得好用的,推薦給大家,到這邊下載就可以了
  • 用了卻還是找不出瓶頸在哪邊?
  • 給點壓力再測試一次吧!!
    如果只測試一次,大概不太會容易找到問題點!~ 但是如果用 ab 跑一下,那就比較容易發現問題囉!!
    像是這樣
    ab -n 200 -c 100 http://your-server/index.php
     
    先執行 ab 讓流量往上衝,然後再跑
    http://your-server/index.php?XDEBUG_PROFILE=1
    這樣看到的結果可能會不太一樣喔!!
  • 結論 + 小技巧
    在我自己抓問題時發現,原來 file_exists 是挺吃效能的
    然後如果你 include 一大堆檔案,可能也會拖慢喔!!
    如果非用 file_exists 的話,其實可用這樣的小技巧喔
    @!!filemtime($file)
    這樣的速度在 Loading 重的時候比直接用 file_exists 還要快喔!!
Facebook 討論區載入中...