ホームページ > バックエンド開発 > PHPチュートリアル > XHProf を使用して PHP パフォーマンスのボトルネックを見つける

XHProf を使用して PHP パフォーマンスのボトルネックを見つける

WBOY
リリース: 2016-06-23 13:27:32
オリジナル
900 人が閲覧しました

XHProf は、PHP パフォーマンスをテストするために Facebook によって開発された拡張機能です。この記事では、XHProf を使用して PHP パフォーマンスを最適化し、PHP アプリケーションのパフォーマンスのボトルネックを見つける方法を記録します。

Xhprof 拡張機能のインストール

$ wget http://pecl.php.net/get/xhprof-0.9.4.tgz$ tar -zxvf xhprof-0.9.4.tgz $ cd xhprof-0.9.4$ cd extension/$ phpize$ ./configure$ make$ sudo make install
ログイン後にコピー

php.ini の変更

[xhprof]extension=xhprof.soxhprof.output_dir=/tmp
ログイン後にコピー

設定では、xhprof.output_dir で生成されたプロファイル ファイルが保存される場所を指定し、/tmp として指定します。

PHPのパフォーマンス分析

XHProf拡張機能では、PHPのパフォーマンス分析のために合計4つの関数が提供されています。

xhprof_enable/xhprof_sample_enable 関数は、XHProf パフォーマンス分析を開始するために使用されます。違いは、前者がより強力であるのに対し、後者はシンプル モード (関数のコール スタック情報を記録するだけ) でパフォーマンス分析を開始し、オーバーヘッドが比較的小さいことです。小さい。

xhprof_disable/xhprof_sample_disable 関数は、パフォーマンス分析を停止し、分析されたデータを返すために使用されます。

特別な説明が必要な関数は xhprof_enable です。他の関数はパラメーターを提供する必要はなく、この関数はツールの動作を変更するために 2 つのオプションのパラメーターを受け入れることができます。

void xhprof_enable ([ int $flags = 0 [, array $options ]] )
ログイン後にコピー
  • flags このパラメータの値は、プロファイリング結果に追加情報を追加するために使用されます。複数の値を指定する必要がある場合は、 | を使用してそれらを区切ります。

    • XHPROFFLAGSNO_BUILTINS すべての組み込み関数をスキップします

    • options

      配列形式は、ignored_functions オプションで無視する必要がある関数を示します

  • 例:例以下では、メモリと CPU が同時に解析され、call_user_func 関数と call_user_func_array 関数の解析は無視されます。
  • xhprof_enable(    XHPROF_FLAGS_MEMORY|XHPROF_FLAGS_CPU,    [        'ignored_functions'    => [            'call_user_func',            'call_user_func_array'        ]    ]);// 这里是PHP代码,比如业务逻辑实现等要被分析的代码部分....$xhprofData = xhprof_disable();// $xhprofData是数组形式的分析结果print_r($xhprofData);
    ログイン後にコピー

    なお、XHPROF_FLAGS_CPU オプションを使用して CPU 使用率も分析すると、Linux 環境ではシステム負荷が比較的高くなるため、メモリ分析には XHPROF_FLAGS_MEMORY のみを使用することをお勧めします。システムに大きな影響を与えることはありません。

  • 分析結果を視覚的に表示する

xhprof_disable を使用してパフォーマンス分析を完了し、分析結果を取得した後、通常は結果を直接出力しません。これは、そのような結果が配列の形式で編成されており、直感的に見えないためです。幸いなことに、はい、xhprof は分析結果を表示するための Web ベースのグラフィカル インターフェイスを提供します。

使用する前に、graphviz ツールがサーバーにインストールされていることを確認してください。インストールされていないと、監視チャートの生成時に次のエラーが表示されます:

failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '
ログイン後にコピー

ドット コマンドが見つからないというメッセージが表示されるため、最初にgraphviz をインストールする必要があります
$ sudo yum install graphviz
ログイン後にコピー

分析結果による 表示ツールは Web ベースなので、xhprof_html ディレクトリの内容にアクセスできるように、xhprof インストール パッケージ内の

xhprofhtml

および

xhproflib

ディレクトリをサーバーの Web ディレクトリに配置する必要があります。外の世界。

たとえば、私のテストサーバー環境は、vagrant を使用して構築された Cent OS です。次の 2 つのディレクトリが

/vagrant/xhprof

ディレクトリの下に配置されていることがわかりました。

[vagrant@localhost xhprof]$ pwd/vagrant/xhprof[vagrant@localhost xhprof]$ lsxhprof_html  xhprof_lib
ログイン後にコピー
Web サーバーは Nginx を使用しているため、Nginx 構成ではファイル nginx.conf は次のとおりです。
server {    listen       80;    server_name  _;    root /vagrant;    ...
ログイン後にコピー
Web サーバーのルート ディレクトリは /vagrant なので、アクセス アドレスは http://localhost/xhprof/xhprof_html/index.php.

もちろん、コード中のxhprof.output_dirで指定したディレクトリに解析結果を保存していないため、解析結果を取得できません。 したがって、xhprof.output_dir で指定されたディレクトリに分析結果を保存できるようにコードを変更する必要があります。

....$xhprofData = xhprof_disable();require '/vagrant/xhprof/xhprof_lib/utils/xhprof_lib.php';require '/vagrant/xhprof/xhprof_lib/utils/xhprof_runs.php';$xhprofRuns = new XHProfRuns_Default();$runId = $xhprofRuns->save_run($xhprofData, 'xhprof_test');echo 'http://localhost/xhprof/xhprof_html/index.php?run=' . $runId . '&source=xhprof_test';
ログイン後にコピー

変数 $runId は、このリクエストによって生成された解析結果の ID です。アドレスを変更することで、このリクエストの解析結果を確認できます。

中央にある [View Full Callgraph] リンクに注目してください。これを通じて、グラフィカルな分析結果を確認できます。

画像の赤い部分は、パフォーマンスが低く、消費時間が長い部分です

どの関数が赤くマークされているかに応じて、システムコードを最適化できます。

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