中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      PHP執行跟蹤工具phptrace介紹

      時間:2024-06-08 21:33:24 PHP 我要投稿
      • 相關推薦

      PHP執行跟蹤工具phptrace介紹2017

        phptrace 是一個追蹤(trace)PHP執行流程的工具,你如果用過strace的話,則可能很容易想到phptrace到底實現了什么樣的功能。其實,phptrace是類strace的一個實現,不同的是,strace用來追蹤系統調用,而phptrace用來追蹤PHP函數調用。無論是開發測試還是線上追查問題,代碼執行流程往往會提供許多有用的信息;

        對于系統函數,我們可以用strace來觀察其調用信息,然而PHP卻長久以來缺少這么一個行之有效的工具,因此我們開發了phptrace。

        phptrace 目前包括兩部分功能:

        1. 打印當前PHP調用棧。

        2. 實時追蹤PHP調用。

        地址:https://github.com/Qihoo360/phptrace

        打印當前PHP進程調用棧

        C程序的調用棧,我們通過pstack或gdb可以很容易獲取到。PHP作為一種非編譯型的語言,實際運行在C編寫的PHP虛擬機之上。當我們用pstack 或 gdb來打印PHP的調用棧時,實際是打印的虛擬機的執行信息。

        比如:

        $ pstack 3130

        #0  0x00000035ee6accc0 in __nanosleep_nocancel () from /lib64/libc.so.6

        #1  0x00000035ee6acb50 in sleep () from /lib64/libc.so.6

        #2  0x0000000000714f23 in zif_sleep ()

        #3  0x00000000008e36cd in execute_internal ()

        #4  0x00007f27b38b2b77 in phptrace_execute_core () from /home/renyongquan/opt/php5.4.35/lib/php/extensions/debug-non-zts-20100525/phptrace.so

        #5  0x00007f27b38b2c04 in phptrace_execute_internal () from /home/renyongquan/opt/php5.4.35/lib/php/extensions/debug-non-zts-20100525/phptrace.so

        #6  0x00000000008e44bc in zend_do_fcall_common_helper_SPEC ()

        3130 為php-fpm的進程ID,通過pstack我們看到了PHP虛擬機調用棧,然而對于一個PHP開發者來說,更感興趣的是PHP的調用棧,你可以通過phptrace獲取:

        $ ./phptrace -p 3130 -s

        phptrace 0.1 demo, published by infra webcore team

        process id = 3130

        script_filename = /home/renyongquan/opt/nginx//webapp/block.php

        [0x7f27b9a99dc8]  sleep /home/renyongquan/opt/nginx/webapp/block.php:6

        [0x7f27b9a99d08]  say /home/renyongquan/opt/nginx/webapp/block.php:3

        [0x7f27b9a99c50]  run /home/renyongquan/opt/nginx/webapp/block.php:10

        -p 參數指定進程pid, -s表示我們需要獲取stack信息; -p參數是必需的,并且只能是PHP相關進程(php,php-cli,php-fpm)的pid,這很好理解,因為我們獲取的是PHP的調用信息。-s 如果省略,則phptrace不會打印調用棧,而是實時獲取PHP函數執行流程,即phptrace的第二個功能,也是其主要功能。現在我們仍然回到stack上來。

        程序輸出的第一行,是版本信息,第二行顯示了其進程PID,第三行是當前執行的PHP腳本,從第四行開始就是調用棧信息,從打印的信息可以看出,最外層run函數調用了say函數,最終調用了sleep函數。這時我們curl訪問以下這個php腳本,顯然會被堵塞住:

        curl http://localhost:8804/block.php

        我們知道,block.php在sleep,但是我們卻不知道其到底要sleep多長時間,如果能獲取到sleep的參數,問題便迎刃而解了,這時,就需要用到我們的第二個功能:實施追蹤PHP調用。

        實時追蹤PHP調用(trace)

        trace功能依賴于我們實現的PHP模塊,模塊作為后端實時獲取PHP調用信息,前端程序phptrace則解析并打印調用信息,因此,在使用這個功能之前需要先安裝phptrace擴展。安裝擴展后,重啟fpm,并打開trace。

        $ phptrace -p 3130

        curl http://localhost:8804/block.php   #重新訪問block.php

        phptrace 打印:

        1417486170.247324 run(<Null>)

        1417486170.247336     say($msg = "hello world")

        1417486170.247356         sleep($seconds = "3600")

        可以看到-p執行PID后,默認執行的就是trace功能,輸出的第一列為函數調用的時間,后面則是調用信息,phptrace按照PHP調用順序,依此打出run, say, sleep;此時,我們可以看到sleep的參數為3600s,因此curl請求要在1小時后才能返回。

        實際上phptrace還可以打印函數返回值及調用耗時,,由于run,say,sleep函數都沒有返回,在上面的例子中無法看到這個效果,我們改一下代碼,使其sleep 1s :

        $ ./phptrace -p 2459

        1417506346.727223 run(<Null>)

        1417506346.727232     say($msg = "hello world")

        1417506346.727241         sleep($seconds = "1")

        1417506347.727341         sleep =>      0       1.000100

        1417506347.727354     say =>    hello world     1.000122

        1417506347.727358 run =>        nil     1.000135

        輸出的前三行跟上面的例子相同,仍然是PHP函數的調用信息,后三行則表明了對應函數的返回值以及調用耗時:sleep 返回0 ,耗時1.000100s, say 返回 "hello world",耗時1.000122s,之所以這么長時間,是因為其調用了sleep函數,同樣run 返回nil,及沒有返回值,耗時1.000135s。

      【PHP執行跟蹤工具phptrace介紹】相關文章:

      PHP開發工具推薦201710-06

      php外部執行命令函數10-27

      PHP執行Linux系統命令函數的方法07-12

      幾種流行PHP集成開發工具的比較06-10

      PHP的變量的介紹11-06

      php在服務器執行exec命令失敗的解決方法-php技巧08-12

      如何在dos命令下執行PHP文件09-18

      php定時執行任務的設置方法參考08-22

      PHP的基本語法的介紹10-07

      介紹PHP Hash算法10-21

      主站蜘蛛池模板: 国产欧美亚洲另类第一页| 欧美h久免费女| 欧美日本视频一区| 国产高清精品在线二区| 厦门市| 亚洲av情网站在线观看| 国产亚洲精品不卡在线| 汤阴县| 久久精品国产亚洲片| 精品樱空桃一区二区三区| 40分钟永久免费又黄又粗| 灌南县| 秦安县| 中文字幕人妻丝袜诱惑| 亚洲日本无码一区二区在线观看 | 五月婷婷激情视频俺也去淫 | 精品人妻人妇中文字幕视频| 激情文学人妻中文字幕| 精品一区二区三区不卡少妇av| 罗甸县| 国产a级黄色一区二区| 十堰市| 双江| 湾仔区| 一区二区视频高清在线观看| 在线观看视频日韩精品| 国产精品成人久久一区二区| av网站影片在线观看| 亚洲美女av一区二区| 亚洲乱码中文字幕综合| 精品黄色av一区二区三区| 双城市| 久色精品国产亚洲av麻豆一| 闵行区| 慈溪市| 久久亚洲中文字幕精品一区四| 泗水县| 武邑县| 国产成人自拍视频在线免费 | 亚洲精品女同午夜在线| 亚洲精品综合在线影院|