The content of this article is about how the extension Xhprof in PHP analyzes the performance of the project. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
The project is about to go online. I want to use some tools to analyze the stability and efficiency of the code. I remembered the xhprof extension I used in the previous team; because I changed to a new computer, Therefore, this extension needs to be recompiled. The installation and actual troubleshooting process are now fully recorded to facilitate your review and help more readers.
Install the extension
Configure the extension
Test analysis
xhprof extension PHP does not come with it. The author needs to install it separately before it can be used after installation. The author uses the source code installation method here. The installation process is as follows
xhprof is already relatively old on PHP’s PECL official version. The author’s PHP version is PHP7.1. Therefore, you need to download the newer version of xhprof on GitHub. Source code, refer to the following command
git clone https://github.com/longxinH/xhprof
Enter the compiled folder, refer to the command
cd xhprof/extension/
Now I need to compile the source code, you can use phpze before compilation To detect the PHP environment, the reference command is as follows:
phpize
The return result is as follows
Configuring for: PHP Api Version: 20160303 Zend Module Api No: 20160303 Zend Extension Api No: 320160303
Generate Makefile to prepare for the next step of compilation
./configure
The return result is as follows
creating libtool appending configuration tag "CXX" to libtool configure: creating ./config.status config.status: creating config.h config.status: config.h is unchanged
Start compiling and install
make && make install
The return result is as follows
Build complete. Don't forget to run 'make test'. Installing shared extensions: /usr/local/Cellar/php@7.1/7.1.19/pecl/20160303/
You can see from the return information that the installation has been completed and the extension is displayed The location of file storage
After compiling and installing the source code, the author also needs to perform some simple configurations on the PHP configuration folder and xhprof. The operation process is as follows
To modify the configuration of PHP, you first need to know where the configuration file is. Here you can use the PHP command to view the location of the configuration file. The reference command is as follows:
php --ini
After executing the command, the returned results are as follows
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
In the returned results, you can see the paths of multiple configuration files. What the author needs is the second filephp.ini
Check the storage location of the extension directory. The reference command is as follows
cat /usr/local/etc/php/7.1/php.ini | grep extension_dir
The return result is as follows
extension_dir = "/usr/local/lib/php/pecl/20160303" ; extension_dir = "ext" ; Be sure to appropriately set the extension_dir directive. ;sqlite3.extension_dir =
From the returned results, you can see The location of the extension's storage directory is as follows
/usr/local/lib/php/pecl/20160303
Now you need to copy the xhprof extension you just compiled to this directory. The reference command is as follows
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/
Edit the configuration file through the vim editor. The reference command is as follows
vim /usr/local/etc/php/7.1/php.ini
Add xhprof configuration at the end of the configuration file, and customize a source file generated by xhprof to save the reference configuration as follows
[xhprof] extension=xhprof.so xhprof.output_dir=/data/www/xhprof/save_output_dir
After saving , the author restarts php-fpm to make its configuration take effect. The restart command can be viewed through the brew command. The reference command is as follows:
brew info php@7.1
After the command is executed, the following information can be seen in the returned information
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
So the restart PHP-FPM command constructed by the author is as follows:
brew services restart php@7.1
After the restart is completed, the return result is as follows
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)
Now verify whether the xhprof extension has been installed Completed, the reference command is as follows
php -m | grep xhprof
After the command is executed, the return result of successful extension installation will display xhprof, as shown in the figure below
##5. TestAfter the above operation, the author has successfully installed and configured. Now I need to use PHP code to verify the analysis effect of xhprof5.1 Create virtual HostFirst create a virtual host so that users can access it through a browser. To create a virtual host, you need to have a root directory and edit the nginx configuration file. The specific operations are as follows: 5.1. 1 Create the project directoryCreate the project root directory, the reference command is as follows
mkdir -p /Users/song/mycode/work/test
cp -r xhprof/xhprof_html /Users/song/mycode/work/test/ cp -r xhprof/xhprof_lib /Users/song/mycode/work/test/
/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 Add a line of parsing records to the file. The record content is as follows:
127.0.0.1 test.localhost
examples folder of the git warehouse. A demo code, but the comments of this code are all in English, and the formatting method is not easy for the author to understand, so I re-edited this file. The reference steps are as follows:
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";
http://test.localhost/xhprof/test.php
You can see a URL address on the page. After copying and opening this URL address, you can see The analysis results of this code are as shown in the figure below
There is a list on the page that shows the time consumed by each method. If you feel that the list is not clear enough, click ## on the page. #View Full Callgraph The link can directly generate a picture, as shown in the picture below
You can clearly see the execution time in the picture All are consumed in the test method, so the author can carry out targeted optimization for this method. Related recommendations:
php performance monitoring extension xhprof
The above is the detailed content of How the extension Xhprof in php analyzes the performance of the project. For more information, please follow other related articles on the PHP Chinese website!