php7でxhprof分析を使用する方法

醉折花枝作酒筹
リリース: 2023-02-18 06:30:02
転載
1486 人が閲覧しました

この記事では、php7 で xhprof 解析を使用する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

php7でxhprof分析を使用する方法

これは純粋なドキュメントです。将来必要になった場合はいつでも参照でき、分析に xhprof を使用して、コードのテストと比較分析を容易にすることができます ( php7 をサポートします)。 php7、ここでは github.com/longxinH /xh… このプロジェクトを使用します。

1.1 プロジェクトをプルします

docker run -it -p 80:80 -v /Users/xxx/Desktop/xhprof:/data phalcon /bin/bash
ログイン後にコピー

コードをコピーします

1.2 プロジェクトをインストールします

git clone https://github.com/longxinH/xhprof.git
ログイン後にコピー

1.3 xhprof.so 拡張を追加します

実行を終了します。この so ファイルを php.ini 設定に導入する必要があります。

php.ini ファイルのパスを確認してください

cd xhprof/extension/
/usr/server/php7/bin/phpize
./configure --with-php-config=/usr/server/php7/bin/php-config
make && make install
ログイン後にコピー
/usr/server/php7/bin/php --ini
 
Configuration File (php.ini) Path: /usr/server/php7/etc
Loaded Configuration File: /usr/server/php7/etc/php.ini
Scan for additional .ini files in: /usr/server/php7/etc/php
Additional .ini files parsed: (none)
ログイン後にコピー

php-fpm を再起動します。

2. xhprof を使用してケースを構築するプロセス

監視対象のロジックの前に次のコードを埋め込みます

编辑 /usr/server/php7/etc/php.ini
[Xhprof]
extension=xhprof.so
xhprof.output_dir=/data/logs
ログイン後にコピー

出力:

xhprof 拡張内の 2 つの関数が呼び出されたことがわかりました。出力値の意味

ct は、この関数の現在の呼び出し数を表します。この場合、すべて 1 回です

wt は関数の実行時間の消費時間を表します。単位はマイクロ秒です。

##これを見ると、取得できる情報はそれほど多くないことがわかります。たとえば、占有メモリ、CPU、その他の指標も気にすることがよくあります。

\xhprof_enable();
......
$order = new OrderAdepter();
$result = $order->getUserOrderByOrderNo(123);
......
$xhprof_data = \xhprof_disable();
print_r($xhprof_data);
ログイン後にコピー

output:

# #XHPROF_FLAGS_MEMORY 統計メモリ使用量

XHPROF_FLAGS_CPU は CPU 使用量をカウントします

    #統計メモリ使用量には、mu と pmu という 2 つの出力フィールドがあることがわかりました。 .mu は使用されているメモリ (バイト) を表し、pmu はピーク時のメモリ使用量 (バイト) を表します。
  1. 3. グラフ xhprof
  2. もちろん、パフォーマンスのボトルネックが解消されることを願っています。

    3.1 このとき、xhprof_lib ライブラリを使用する必要があります。
  3. xhprof ソース コードをダウンロードしたとき, ディレクトリにはすでに

    \xhprof_enable(
    XHPROF_FLAGS_MEMORY
    +XHPROF_FLAGS_CPU
    +XHPROF_FLAGS_NO_BUILTINS
    );
    ログイン後にコピー

    が含まれていました。実行により、ファイル識別子として理解できる文字列が出力されました。save_run メソッドが実行されたことがわかりました。それではどこに保存されましたか?
xhprof.so 拡張機能を導入したときの別の構成を覚えていますか?

はい、xhprof.output_dir で構成されたパスの下にあります (ディレクトリを自分で手動で作成する必要があります)

ご興味がございましたら、開いてご覧ください。これには、分析したシリアル化されたオブジェクト情報が含まれています。

##3.2 分析結果にアクセスするための別のサービスを構成する

#xhprof プロジェクトの xhprof_html ディレクトリを指します

##そう思いますこれで、save_run での run_id とプロジェクトの役割が理解できました。

このセクションの上部は、要求されたインターフェイス インジケーターの概要であり、以下は各呼び出し関数の具体的な実行です。

フィールド名は、コール数を意味します。ウォールタイム呼び出しを含む。ウォールタイム呼び出しを除く、サブ関数によって費やされたすべての時間がマイクロ秒単位で測定されます。ウォールタイムを除くサブツリーの実行時間を除く、関数自体の実行に費やされた時間。マイクロ秒単位で測定 Calculate Inclu. CPU 呼び出しには、サブ関数によって費やされるすべての CPU 時間が含まれます Excl. サブツリー実行時間を除く、CPU 関数の実行自体によって費やされる CPU 時間 (マイクロ秒単位で計算されます) Incl.MemUse にはメモリが含まれますサブ関数の実行によって使用される (バイト単位) Excl.MemUse 関数の実行自体のメモリを計算し、Incl.PeakMemUseIncl.MemUse のピーク値をバイト単位で計算します。Excl.PeakMemUseExcl.MemUse

# のピーク値##残りの % 末尾は対応する割合です。

3.3 [コールグラフ全体を表示]

次の 2 行のコードを実行して

\xhprof_enable(XHPROF_FLAGS_MEMORY + XHPROF_FLAGS_CPU+XHPROF_FLAGS_NO_BUILTINS);
 
......
$order = new OrderAdepter();
$result = $order->getUserOrderByOrderNo(123);
......
 
$xhprof_data = \xhprof_disable();
 
include_once '/data/xhprof-master/xhprof_lib/utils/xhprof_lib.php';
include_once '/data/xhprof-master/xhprof_lib/utils/xhprof_runs.php';
$xhprof_runs = new \XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, 'your_project');
echo $run_id; //output 5cbf25e21fe9b
ログイン後にコピー
をインストールすることもできます。

呼び出しプロセスを表示したい場合は、graphviz グラフィック ライブラリをインストールする必要があります。ここでは、graphviz 2.24 .0 このバージョンを手動でインストールすることをお勧めします (個人的にピットに足を踏み入れます。2.40 はサポートされていません)

yum install -y libpng
yum install -y graphviz
ログイン後にコピー

と思われる場合は、赤と黄色の部分に注目してください。特定のプロセスを分析したい場合は、メソッドをクリックして、 [View Full Callgraph] でチャートを表示します

4. 問題

上記の xhprof を使用するときに、強い依存関係があり、xhprof インストール パッケージ内のいくつかのクラスがコードに導入されていることがわかりました。

yum -y install libtool-ltdl-devel
 
cd /data/graphviz-2.24.0
 
./configure
make
make install
ログイン後にコピー
ここでは、composer パッケージのリファレンスを使用して同じ機能を実現できます。pbweb/xhprof パッケージを導入することをお勧めします。

推奨学習:

php ビデオ チュートリアル

以上がphp7でxhprof分析を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート