使用 tideways_xhprof + xhgui 分析 PHP 執行情況

Mortence發表於2020-08-18
  • 前期準備

    1. 安裝 tideways 擴充套件
      詳情見 github.com/tideways/php-xhprof-ext...
      生成 PHP 執行情況資料是依賴這個擴充套件

    2. 拉取 xhgui 專案,主要展示上面產生的資料
      github.com/perftools/xhgui
      這個專案依賴 mongodb ,所以還需要安裝 mongodb 和對應的 php 擴充套件

  • 配置

    有兩種配置方法,直接使用 xhgui 的 header.php 檔案比較簡單,配置使用不用修改程式碼,但是 cli 模式的程式碼不能使用這種方法

    • 可以直接引入 xhgui 的 header 檔案
      在 nginx 或 apache 配置中加入

          auto_prepend_file=/var/www/xhgui/external/header.php

      引入後直接訪問目標 url ,然後檢視 xhgui 即可

    • 手動配置

      1. 在需要分析的程式碼前新增

             tideways_xhprof_enable(TIDEWAYS_XHPROF_FLAGS_CPU | TIDEWAYS_XHPROF_FLAGS_MEMORY | TIDEWAYS_XHPROF_FLAGS_NO_BUILTINS);

        文件上是不使用引數的,不使用引數的分析資料中只有 ct wt 資料,沒有記憶體情況,xhgui 顯示的時候會報錯,所以需要新增對應的引數配置

      2. 在執行程式碼後新增

          $xhprofData['profile'] = tideways_xhprof_disable();
        
          $time = time();
        
          $requestTs = array('sec' => $time, 'usec' => 0);
          $requestTsMicro = array('sec' => 0, 'usec' => 0);
        
          $xhprofData['meta'] = array(
            'url' => "",
            'SERVER' => $_SERVER,
            'get' => $_GET,
            'env' => $_ENV,
            'simple_url' => "",
            'request_ts' => $requestTs,
            'request_ts_micro' => $requestTsMicro,
            'request_date' => date('Y-m-d', $time),
          );
        
          file_put_contents(
              './myapplication.json',
              json_encode($xhprofData)."\r\n",
            FILE_APPEND
          );

        按行寫入分析資料。

        因為要匯入到 xhgui 中,所以需要按照 xhgui 的資料格式來匯入資料,不然 xhgui 無法正常顯示,上面這個格式是 xhgui 格式來拼裝的資料

      3. 將上面生成的 json 檔案匯入到 xhgui 資料庫中

        透過執行 xhgui 的 import.php 來進行匯入即可,執行匯入之前需要配置 xhgui 的 mongo

          php /var/www/xhgui/external/import.php -f ./myapplication.xhprof

        現在就可以去 xhgui 檢視資料了

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章