我們有一個新的跟踪工具熔融,它是一個開放跟踪支持的跟踪,為分佈式跟踪系統。
施工跟踪;熔化;開放跟踪;合作
中文自述
phptrace是一個用於PHP的低開銷跟踪工具。
它可以在運行時跟踪所有PHP執行、函數調用、請求資訊。並提供過濾、統計、當前狀態等功能。
在所有的環境中,特別是在生產環境中,查找阻塞、重載問題和調試是非常有用的。
特徵:
- 低開銷,當加載擴展並且關閉跟踪時
- 穩定,在奇虎360上運行,在主流框架上測試
- 易於使用,無需擴展安裝即可查看PHP運行時狀態
其他:
- PECL下載
新聞我們已經建立了另一個有趣的項目pika。它是一個與Redis協定相容的NoSQL,具有巨大的存儲空間。
從源安裝
- 正在選取tarballtar-xf phptrace-{version}.tar.gzcd phptrace-{version}/extension
選取焦油球
tar -xf phptrace-{version}.tar.gz
cd phptrace-{version}/extension
- BuildPHP擴展{php-bin-dir}/phpize./configure--with php config={php-bin-dir}/php configmakeCLI Binarymake cli
建造
PHP擴展
{php_bin_dir}/phpize
./configure --with-php-config={php_bin_dir}/php-config
make
按一下二進位
make cli
- Install&ConfigureInstall PHP Extension,CLI Binary到PHP pathmake Install allEdit PHP.ini中,添加以下行。如果PHP在PHP fpm mode.extension=trace.so上運行,則需要重新加載
安裝和配寘
在PHP路徑中安裝PHP擴展,CLI二進位檔案
make install-all
編輯php.ini,添加以下行。如果PHP在PHP fpm模式下運行,則需要重新加載。
php.ini
extension=trace.so
- Verifyphp-r'用於($i=0;$i<20;$i++)usleep(50000);'&phptrace-p$!如果運行fineprocess attached[pid 3600]>cli php-[pid 3600]>{main}()在[Command line code:1][pid 3600]>usleep(50000)在[Command line code:1][pid 3600]<usleep(50000)=NULL在[Command line code:1]~0.051s 0.051s[pid 3600]>usleep(50000)在[ Command line code:1][pid3600]<usleep(50000)=在[命令列程式碼:1]~0.051s 0.051s[pid 3600]>usleep(50000)調用[命令列程式碼:1][pid 3600]<usleep(50000)=在[命令列程式碼:1]~0.051s 0.051s[pid 3600]>usleep(50000)調用[命令列程式碼:1]。。。
核實
php -r 'for ($i = 0; $i < 20; $i++) usleep(50000);' &
phptrace -p $!
如果工作正常,你應該看看下麵的內容
process attached
[pid 3600]> cli php -
[pid 3600]> {main}() called at [Command line code:1]
[pid 3600] > usleep(50000) called at [Command line code:1]
[pid 3600] < usleep(50000) = NULL called at [Command line code:1] ~ 0.051s 0.051s
[pid 3600] > usleep(50000) called at [Command line code:1]
[pid 3600] < usleep(50000) = NULL called at [Command line code:1] ~ 0.051s 0.051s
[pid 3600] > usleep(50000) called at [Command line code:1]
[pid 3600] < usleep(50000) = NULL called at [Command line code:1] ~ 0.051s 0.051s
[pid 3600] > usleep(50000) called at [Command line code:1]
...
用法
試試php example.php。
php example.php
命令列選項
- 運行php行程的跟踪跟踪(默認)
- 狀態顯示php行程狀態
- 版本顯示版本
- -p指定php行程id(“all”跟踪所有行程)
- -h顯示助手
- -v與版本相同
- -f按類型(url、函數、類)和內容篩選數據
- -l限制輸出計數
- --狀態模式下的ptrace使用ptrace獲取數據
跟踪執行
$ phptrace -p 3600
[pid 3600] > Me->run() called at [example.php:57]
[pid 3600] > Me->say("good night") called at [example.php:33]
[pid 3600] < Me->say("good night") = NULL called at [example.php:33] ~ 0.000s 0.000s
[pid 3600] > Me->sleep() called at [example.php:34]
[pid 3600] > Me->say("sleeping...") called at [example.php:27]
[pid 3600] < Me->say("sleeping...") = NULL called at [example.php:27] ~ 0.000s 0.000s
[pid 3600] > sleep(2) called at [example.php:28]
[pid 3600] < sleep(2) = 0 called at [example.php:28] ~ 2.000s 2.000s
[pid 3600] < Me->sleep() = NULL called at [example.php:34] ~ 2.000s 0.000s
[pid 3600] > Me->say("wake up") called at [example.php:35]
[pid 3600] < Me->say("wake up") = NULL called at [example.php:35] ~ 0.000s 0.000s
[pid 3600] < Me->run() = NULL called at [example.php:57] ~ 2.000s 0.000s
列印當前狀態
$ phptrace status -p 3600
------------------------------- Status --------------------------------
PHP Version: 7.0.16
SAPI: cli
script: example.php
elapse: 26.958s
------------------------------ Arguments ------------------------------
$0
------------------------------ Backtrace ------------------------------
#0 fgets() called at [example.php:53]
#1 {main}() called at [example.php:53]
使用url/class/function篩檢程式跟踪
$ phptrace -p 3600 -f type=class,content=Me
[pid 3600]> Me->run() called at [example.php:57]
[pid 3600]> Me->say("good night") called at [example.php:33]
[pid 3600]< Me->say("good night") = NULL called at [example.php:33] ~ 0.000s 0.000s
[pid 3600]> Me->sleep() called at [example.php:34]
[pid 3600]> Me->say("sleeping...") called at [example.php:27]
[pid 3600]< Me->say("sleeping...") = NULL called at [example.php:27] ~ 0.000s 0.000s
[pid 3600]< Me->sleep() = NULL called at [example.php:34] ~ 2.000s 2.000s
[pid 3600]> Me->say("wake up") called at [example.php:35]
[pid 3600]< Me->say("wake up") = NULL called at [example.php:35] ~ 0.000s 0.000s
[pid 3600]< Me->run() = NULL called at [example.php:57] ~ 2.001s 0.000s
限制幀/URL顯示時間
$ phptrace -p 3600 -l 2
[pid 3600] > Me->run() called at [example.php:57]
[pid 3600] > Me->say("good night") called at [example.php:33]
[pid 3600] < Me->say("good night") = NULL called at [example.php:33] ~ 0.000s 0.000s
[pid 3600] > Me->sleep() called at [example.php:34]
[pid 3600] > Me->say("sleeping...") called at [example.php:27]
[pid 3600] < Me->say("sleeping...") = NULL called at [example.php:27] ~ 0.000s 0.000s
貢獻
歡迎願意改善PHP環境的開發人員。
如果您有興趣但不知道如何開始,請嘗試以下操作:
- 在你的系統上使用它,迴響問題,功能請求。
- 這是路線圖,試著開發一個。
- 還有別的嗎?聯系[email protected]。
許可證
此項目是在Apache2.0許可下發佈的。