XHProf は、PHP パフォーマンスをテストするために Facebook によって開発された拡張機能です。この記事では、XHProf を使用して PHP パフォーマンスを最適化し、PHP アプリケーションのパフォーマンスのボトルネックを見つける方法を記録します。
$ 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 として指定します。
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 すべての組み込み関数をスキップします
配列形式は、ignored_functions オプションで無視する必要がある関数を示します
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 ツールがサーバーにインストールされていることを確認してください。インストールされていないと、監視チャートの生成時に次のエラーが表示されます:
ドット コマンドが見つからないというメッセージが表示されるため、最初にgraphviz をインストールする必要がありますfailed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found 'ログイン後にコピー
$ sudo yum install graphviz
および
xhproflibディレクトリをサーバーの Web ディレクトリに配置する必要があります。外の世界。
たとえば、私のテストサーバー環境は、vagrant を使用して構築された Cent OS です。次の 2 つのディレクトリが
/vagrant/xhprof ディレクトリの下に配置されていることがわかりました。 [vagrant@localhost xhprof]$ pwd/vagrant/xhprof[vagrant@localhost xhprof]$ lsxhprof_html xhprof_lib
server { listen 80; server_name _; root /vagrant; ...
もちろん、コード中の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] リンクに注目してください。これを通じて、グラフィカルな分析結果を確認できます。
画像の赤い部分は、パフォーマンスが低く、消費時間が長い部分です
どの関数が赤くマークされているかに応じて、システムコードを最適化できます。