2014年1月14日 星期二

[PHP] PHP Profiling 效能分析追蹤工具 (APD)

當程式寫完後, 發現整頁跑起來速度有點慢, 要追蹤分析是哪邊是造成速度慢的主因, 通常最簡單的方法, 是用 microtime() (可見此文: PHP 測量程式執行時間)來把每個 Function 包起來, 分別看執行時間.
如果太多要追蹤, 懶得這樣子包來包去, 另外一種就是用 PHP Profiling 的工具(APD)來做, 詳可見下述:
不過, 太久沒用這工具, 沒想到 APD 從 2008年到現在(2011), 都沒有新版, 使用 Pecl 安裝, 也無法直接安裝完成, 在此順便把解法紀錄於此.



PHP APD 安裝 與 問題排除

  1. sudo apt-get install php-pear # 有 /usr/bin/pecl
  2. sudo apt-get install re2c # apd compile 需要
  3. sudo pecl search apd # http://pecl.php.net/package/apd
  4. sudo pecl install apd # 安裝失敗, 出現下述錯誤
    make: *** [php_apd.lo] Error 1
解法
  1. 詳見: Debian PHP 5.3 APD compile problems
  2. sudo pecl download apd
  3. tar xvf apd-1.0.1.tgz
  4. cd apd-1.0.1/
  5. vim php_apd.c
    # 第 967 行
    GC(extended_info) = 1;
    改成
    CG(compiler_options) |= ZEND_COMPILE_EXTENDED_INFO;
  6. phpize
  7. ./configure
  8. make
  9. make test
  10. sudo make install
    Installing shared extensions: /usr/lib/php5/20090626/
  11. sudo cp pprofp /usr/bin/ # pprofp 是用來分析 profiling 完成後的檔案用

PHP APD 設定

  • vim /etc/php5/conf.d/apd.ini
    zend_extension = /usr/lib/php5/20090626/apd.so
    apd.dumpdir = /tmp
    apd.statement_trace = 0

PHP APD 使用 與 測試

APD 使用方式很簡單, 只要在要 trace 的 script 上面, 加上 "apd_set_pprof_trace();" 就可以了, 詳可見下述範例.
  1. vim script.php # 需在要 trace 得程式上面加上 "apd_set_pprof_trace();"
    <?php
    apd_set_pprof_trace();

    //rest of the script
    $a = '2001-03-01 11:11:12';
    echo substr($a, 0, 4);
    echo substr($a, 5, 2);
    echo substr($a, 8, 2);
    ?>
  2. php -e -f script.php # 也可以直接 php script.php 即可, 會產生類似如此的檔案: "/tmp/pprof.xxxxx"

PHP APD 分析

PHP APD 的 pprofp 請依照自己所需要的參數使用, 會出現類似下述的分析結果.
  • pprofp -u /tmp/pprof.25802
  • pprofp -t /tmp/pprof.15507
    Trace for /tmp/script.php
    Total Elapsed Time = 0.01
    Total System Time  = 0.00
    Total User Time    = 0.00
    Real         User        System             secs/    cumm
    %Time (excl/cumm)  (excl/cumm)  (excl/cumm) Calls    call    s/call  Memory Usage Name
    --------------------------------------------------------------------------------------
    0.0 0.00 0.00  0.00 0.00  0.00 0.00     3  0.0000   0.0000            0 substr
    0.0 0.01 0.01  0.00 0.00  0.00 0.00     1  0.0000   0.0000            0 apd_set_pprof_trace
    0.0 0.00 0.01  0.00 0.00  0.00 0.00     1  0.0000   0.0000            0 main
    轉貼自:http://blog.longwin.com.tw/2011/05/php-apd-profiling-analytics-2011/

沒有留言:

張貼留言

Google Analytics初學者入門簡介