<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          DelivererPHP 項(xiàng)目調(diào)度追蹤工具

          聯(lián)合創(chuàng)作 · 2023-10-01 21:32

          Deliverer 是一個(gè) PHP 項(xiàng)目調(diào)度追蹤工具,主要用于線上故障排查。

          使用場(chǎng)景

          1. 如果你有一些老的 PHP (PHP5 和 PHP7)項(xiàng)目,對(duì)線上一個(gè)項(xiàng)目運(yùn)行邏輯不熟悉;
          2. 或者你對(duì)某個(gè)方法的調(diào)用來源不清楚;
          3. 又或者線上有一個(gè)接口不知道是哪里異常退出了;
          4. 還有線上調(diào)用特別耗時(shí),都比較適合使用 Deliverer 來解決,幫助你避免跑路。

          使用方法

          • 可以根據(jù)函數(shù)名類名、方法名、路由來過濾輸出
          • 可以在查詢到指定過濾內(nèi)容 n 次之后退出
          • 可以根據(jù) request id 回放細(xì)看整個(gè)完整的調(diào)用鏈
          • 過濾的內(nèi)容會(huì)高亮顯示
          • 調(diào)用棧比較深的可以指定 -l 來隱藏深度調(diào)用的展示

          原理

          其實(shí)比較簡(jiǎn)單,分兩步,第一步收集日志,第二步分析日志。

          第一步

          PHP_MINIT階段,通過zend_set_user_opcode_handler 來設(shè)置對(duì) ZEND_DO_UCALL 、ZEND_DO_FCALL_BY_NAME、ZEND_DO_FCALL 三類 opcode 的處理分析。

          注意其中會(huì)涵蓋一些內(nèi)置函數(shù)和方法的調(diào)用,我們可以通過類型進(jìn)行過濾。

          然后在PHP_RINIT階段新建日志文件,寫入請(qǐng)求的信息

          pid-ts sapi http_method http_url

          請(qǐng)求過程中在自定義的 handler 里面打印調(diào)用棧信息

          最后在PHP_RSHUTDOWN關(guān)閉日志文件的寫入

          第二步

          對(duì)收集好的日志,利用bin/deliverer進(jìn)行分析和整理,這塊是 php 腳本,就不贅述了。

          安裝使用

          下載

          $ sudo wget http://github.com/zhoumengkang/deliverer/archive/refs/tags/1.0.4.zip
          $ unzip 1.0.4.zip
          $ rm -f 1.0.4.zip
          $ cd deliverer-1.0.4/extension

          編譯

          $ whereis phpize
          phpize: /usr/bin/phpize /usr/share/man/man1/phpize.1.gz
          
          # 如果前面的路徑(/usr/bin)在環(huán)境變量里,也可以簡(jiǎn)寫為 phpize,如果不太懂,直接復(fù)制執(zhí)行
          $ /usr/bin/phpize
          
          $ whereis php-config
          php-config: /usr/bin/php-config /usr/share/man/man1/php-config.1.gz
          
          $ ./configure --with-php-config=/usr/bin/php-config
          $ make && sudo make install

          配置 php.ini

          $ php -i|grep php.ini
          Configuration File (php.ini) Path => /etc
          Loaded Configuration File => /etc/php.ini
          
          # 編輯 /etc/php.ini 文件
          $ sudo vim /etc/php.ini
          # 文件末尾增加以下兩行
          [deliverer]
          extension=deliverer.so

          重啟 php-fpm

          sudo service php-fpm restart

          使用分析工具

          可以移動(dòng)./bin/deliverer到你覺得合適的目錄,假如在當(dāng)前目錄

          # 回到文件的解壓目錄,開啟監(jiān)聽
          $ cd ..
          $ ./bin/deliverer -t

          用一段我自己很久之前的祖?zhèn)鞔a(我的博客)來跑下

          $ ./bin/deliverer -t

          這樣會(huì)一直監(jiān)控所有的 php 進(jìn)程的執(zhí)行

          $ ./bin/deliverer -tAction::initUser -n3 -l5


          參數(shù) 解釋
          -t Action::initUser 過濾包含該調(diào)用的請(qǐng)求
          -n 3 統(tǒng)計(jì)三次然后退出
          -l 5 函數(shù)(方法)調(diào)用深度顯示,最多顯示 5 層,超出部分在末尾標(biāo)出
          $ ./bin/deliverer -v7979-1624369150991941

          通過 -v requestId 來詳細(xì)查看完整調(diào)用棧

          $ ./bin/deliverer -tSqlExecute::getAll -n1 -l3

          當(dāng)要查詢方法,函數(shù)調(diào)用棧過深,不在層級(jí)查詢范圍之內(nèi),則其外層調(diào)用顯示紅色

          PHP 祖?zhèn)鞔a拯救者 Deliverer 他,來了!

          瀏覽 10
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  大香蕉凹凸 | 五月丁香在线观看 | 国产欧美色图 | 天堂国产一区二区三区不卡 | 亚洲福利一区 |