この記事の内容は、PHP の拡張機能 Xhprof がプロジェクトのパフォーマンスをどのように分析するかというもので、一定の参考価値がありますので、困っている友人は参考にしていただければ幸いです。
プロジェクトがオンラインに移行しようとしています。コードの安定性と効率を分析するためにいくつかのツールを使用したいと考えています。前のチームで使用していた xhprof 拡張機能を思い出しました。 ; 新しいコンピューターに変更したため、この拡張機能は再コンパイルする必要があります。レビューを容易にし、より多くの読者を支援するために、インストールと実際のトラブルシューティングのプロセスが完全に記録されるようになりました。
拡張機能のインストール
拡張機能の設定
テスト分析
xhprof 拡張機能 PHP は付属していません。インストール後に使用できるようにする前に、作者が別途インストールする必要があります。著者はここでソースコードをインストールする方法を使用します. インストールプロセスは次のとおりです.
xhprof は PHP の PECL 正式バージョンですでに比較的古いものです. 著者の PHP バージョンは PHP7 です. 1. したがって、GitHub で xhprof の新しいバージョンをダウンロードする必要があります。ソース コードは次のコマンドを参照してください。
git clone https://github.com/longxinH/xhprof
コンパイルされたフォルダーに入り、コマンドを参照してください
cd xhprof/extension/
次に、ソース コードをコンパイルする必要があります。コンパイル前に phpze を使用できます。PHP 環境を検出するには、参照コマンドは次のとおりです。
phpize
戻り結果は次のとおりです
Configuring for: PHP Api Version: 20160303 Zend Module Api No: 20160303 Zend Extension Api No: 320160303
コンパイルの次のステップの準備として Makefile を生成します
./configure
返される結果は次のとおりです
creating libtool appending configuration tag "CXX" to libtool configure: creating ./config.status config.status: creating config.h config.status: config.h is unchanged
コンパイルとインストールを開始します
make && make install
返却結果は以下の通りです
Build complete. Don't forget to run 'make test'. Installing shared extensions: /usr/local/Cellar/php@7.1/7.1.19/pecl/20160303/
返却情報からインストールが完了し拡張子が表示されていることが分かります ファイルの保存場所
ソース コードをコンパイルしてインストールした後、作成者は PHP 構成フォルダーと xhprof でいくつかの簡単な構成を実行する必要があります。操作プロセスは次のとおりです
PHP の構成を変更するには、まず構成ファイルの場所を知る必要があります。ここで、PHP コマンドを使用して構成ファイルの場所を表示できます。参照コマンドは次のとおりです:
php --ini
コマンドを実行すると、返された結果は次のとおりです
Configuration File (php.ini) Path: /usr/local/etc/php/7.1 Loaded Configuration File: /usr/local/etc/php/7.1/php.ini Scan for additional .ini files in: /usr/local/etc/php/7.1/conf.d Additional .ini files parsed: /usr/local/etc/php/7.1/conf.d/ext-opcache.ini
返された結果には、複数の設定ファイルのパスが表示されます。作成者が必要とするのは 2 番目のファイルです php.ini
拡張機能ディレクトリの格納場所を確認します 参照コマンドは以下のとおりです
cat /usr/local/etc/php/7.1/php.ini | grep extension_dir
戻り結果は以下のとおりです
extension_dir = "/usr/local/lib/php/pecl/20160303" ; extension_dir = "ext" ; Be sure to appropriately set the extension_dir directive. ;sqlite3.extension_dir =
返された結果から、拡張機能の保存ディレクトリの場所は次のとおりであることがわかります
/usr/local/lib/php/pecl/20160303
ここで、コンパイルしたばかりの xhprof 拡張機能をこのディレクトリにコピーする必要があります。
cp /usr/local/Cellar/php@7.1/7.1.19/pecl/20160303/xhprof.so /usr/local/Cellar/php@7.1/7.1.19/pecl/20160303/
vimエディターで設定ファイルを編集します 参考コマンドは以下のとおりです
vim /usr/local/etc/php/7.1/php.ini
設定ファイルの最後にxhprof設定を追加し、生成されたソースファイルをカスタマイズしますxhprof を使用して参照設定を次のように保存します
[xhprof] extension=xhprof.so xhprof.output_dir=/data/www/xhprof/save_output_dir
保存後、作成者は php-fpm を再起動してその設定を有効にします。参照コマンドは次のとおりです:
brew info php@7.1
コマンドの実行後、返された情報には次の情報が表示されます
To have launchd start php@7.1 now and restart at login: brew services start php@7.1 Or, if you don't want/need a background service you can just run: php-fpm
したがって、restart PHP-FPM コマンドは、
brew services restart php@7.1
再起動が完了すると、返される結果は次のとおりです
Stopping `php@7.1`... (might take a while) ==> Successfully stopped `php@7.1` (label: homebrew.mxcl.php@7.1) ==> Successfully started `php@7.1` (label: homebrew.mxcl.php@7.1)
次に、xhprof 拡張機能がインストールされているかどうかを確認します。完了した参照コマンドは次のとおりです。
php -m | grep xhprof
コマンドの実行後、拡張機能のインストールが成功した場合の戻り結果には、次の図に示すように xhprof が表示されます
##5. テスト上記の操作の後、作成者はインストールと設定に成功しました。次に、PHP コードを使用して xhprof の分析効果を検証する必要があります。 5.1 仮想ホストの作成まず、ユーザーがブラウザ経由でアクセスできるように仮想ホストを作成します。仮想ホストを作成するには、ルート ディレクトリを作成し、nginx 構成ファイルを編集する必要があります5.1. 1 プロジェクトディレクトリの作成プロジェクトのルートディレクトリを作成します、参照コマンドは以下の通りです
mkdir -p /Users/song/mycode/work/test作成後成功した場合、作成者は git によってプルダウンされたコードの一部をプロジェクトのルート ディレクトリにコピーする必要があります。参照コマンドは次のとおりです
cp -r xhprof/xhprof_html /Users/song/mycode/work/test/ cp -r xhprof/xhprof_lib /Users/song/mycode/work/test/5.1.2 設定ファイルを編集します
/usr/local/etc/nginx/nginx.conf
次のように構成ファイルを追加します
server { listen 80; server_name test.localhost; root /Users/song/mycode/work/test; index index.html index.htm index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }/etc/hosts に
解析レコードの行をファイルに追加します。 <pre class="brush:php;toolbar:false">127.0.0.1 test.localhost</pre>
5.2 新しいテスト コードを作成します
フォルダーにあります。デモ コードですが、このコードのコメントはコードはすべて英語であり、整形方法が作成者にとって理解しにくいため、このファイルを再編集しました。参考手順は次のとおりです。 使用して新しい PHP ファイルを作成します
vim /Users/song/mycode/work/test/test.php
次のコードをファイルに追加します
<?php //加载所需文件 include_once "./xhprof_lib/utils/xhprof_lib.php"; include_once "./xhprof_lib/utils/xhprof_runs.php"; //随意定义一个函数 function test($max) { for ($idx = 0; $idx < $max; $idx++) { echo ''; } } //定义测试方法 function a() { test(rand(1000,5000)); } //开始分析 xhprof_enable(); //需要分析的函数 a(); //结束分析 $xhprof_data = xhprof_disable(); //实例化xhprof类 $xhprof_runs = new XHProfRuns_Default(); //获取当前当前页面分析结果 $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo"); echo "\nhttp://test.localhost/xhprof/xhprof_html/index.php?run=$run_id&source=xhprof_foo\n";
コードを保存した後、ブラウザから対応する URL アドレスにアクセスします。URL アドレスは次のとおりです。
http://test.localhost/xhprof/test.php
5.3 結果の分析
ページ内にURLアドレスが表示されますので、このURLをコピーして開くと、このコードの解析結果は下図のとおりです。
ページには、各方法にかかる時間を示すリストがあります。リストが十分に明確ではないと思われる場合は、リストの ## をクリックしてください。 #View Full Callgraph リンクでは、下の図に示すように、画像を直接生成できます。
実行結果を明確に確認できます。画像内の時間はすべてテスト メソッドで消費されるため、作成者はこのメソッドに対してターゲットを絞った最適化を実行できます。 関連する推奨事項: ##Web パフォーマンス分析に xhprof (PHP) 拡張機能を使用する
以上がPHP の拡張機能 Xhprof がプロジェクトのパフォーマンスを分析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。