Use PHP extension XHProf to implement function-level performance monitoring.
Quoting the official description of XHProf:
XHProf is a function-level hierarchical profiler for PHP and has a simple HTML based navigational interface. The raw data collection component is implemented in C (as a PHP extension). The reporting/UI layer is all in PHP. It is capable of reporting function-level inclusive and exclusive wall times, memory usage, CPU times and number of calls for each function. Additionally, it supports ability to compare two runs (hierarchical DIFF reports), or aggregate results from multiple runs.
Provides function-level performance information such as number of calls, which includes blocking time, memory usage, and CPU time.
1. Installation and configuration
/data/software # wget http://pecl.php.net/get/xhprof-0.9.2.tgz
/data/software # tar zxvf xhprof-0.9.2.tgz
/data/software # cd xhprof-0.9.2/
/data/software/xhprof-0.9.2 # ls -alp
Total 968
drwxr-xr-x 6 root root 4096 2013-03-18 09:09 ./
drwxr-xr-x 47 root root 8192 2013-03-18 09:09 ../
-rw-r--r-- 1 1425 users 3359 2009-06-02 01:52 CHANGELOG
-rw-r--r-- 1 1425 users 266 2009-06-02 01:52 CREDITS
drwxr-xr-x 2 root root 4096 2013-03-18 09:09 examples/ # demo
drwxr-xr-x 8 root root 4096 2013-03-18 09:09 extension/ # pecl
-rw-r--r-- 1 1425 users 10174 2009-06-02 01:52 LICENSE
-rw-r--r-- 1 1425 users 186 2009-06-02 01:52 README
-rw-r--r-- 1 root root 931660 2009-06-02 01:55 xhprof
drwxr-xr-x 6 root root 4096 2013-03-18 09:09 xhprof_html/ # Built-in interface package
drwxr-xr-x 4 root root 4096 2013-03-12 15:40 xhprof_lib/ # Function library
/data/software/xhprof-0.9.2 # cd extension/
/data/software/xhprof-0.9.2/extension # phpize
/data/software/xhprof-0.9.2/extension # ./configure --with-php-config=/usr/local/services/php/bin/php-config --enable-xhprof
/data/software/xhprof-0.9.2/extension # make
/data/software/xhprof-0.9.2/extension # make install
Installing shared extensions: /usr/local/services/php/lib/php/extensions/no-debug-non-zts-20090626/
/data/software/xhprof-0.9.2/extension # cp /usr/local/services/php/lib/php/extensions/no-debug-non-zts-20090626/xhprof.so /usr/local/ services/php/extensions/
# Copy the generated xhprof.so to the extension_dir directory, configure php.ini, and restart php-fpm or the server
// php.ini
[xhprof]
extension=xhprof.so
xhprof.output_dir="/data/logs/servers/xhprof"
# Check if xhprof is loaded
/data/software/xhprof-0.9.2/extension # php -m|grep xhprof
xhprof
2. Performance analysis and logging
First enable XHProf to record the performance analysis log of one-tenth of the requests (the log is recorded in /data/logs/servers/xhprof):
$xhprofEnabled = FALSE;
if(extension_loaded('xhprof') && mt_rand(1, 10) === 1) { // Analyze one-tenth of the request performance
// Enable performance monitoring
xhprof_enable(/*XHPROF_FLAGS_CPU + */XHPROF_FLAGS_MEMORY + XHPROF_FLAGS_NO_BUILTINS );
$xhprofEnabled = TRUE;
}
Then register the request end handler so that the XHProf performance analysis log is recorded when the request ends:
function profile_record() {
if(isset($GLOBALS['xhprofEnabled']) && $GLOBALS['xhprofEnabled']) {
$xhprof_data = xhprof_disable();
$path = $_SERVER['PHP_SELF'];
if($pos = strpos($path, '/htdocs')) {
$path = substr($path, $pos+7);
}
$basename = str_replace(array('.', '/'), '_', ltrim($path, '/'));
/* Official Demo, please refer to xhprof-0.9.2/examples/sample.php in the download package
* * //
* // Saving the XHProf run
* // using the default implementation of iXHProfRuns.
* * //
* include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
* include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
* $xhprof_runs = new XHProfRuns_Default();
*/
$xhprof_runs = new HWSL_XhProfRuns();
// Introduce time cutoff when recording logs to facilitate comparison of performance differences between different versions
$run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof_itravel_'.$basename.'_'.date('YmdHis'));
}
}
register_shutdown_function('profile_record');
The generated log is saved as a file in: xhprof.output_dir="/data/logs/servers/xhprof"
The naming rules for the generated log files are: .
The naming rule of the namespace is defined as: 'xhprof_itravel_'.$basename.'_'.date('YmdHis')
$basename records the corresponding file location, and date(‘YmdHis’) records the current timestamp to compare the performance differences between different versions of the same file.
3. Log analysis
Then, view the running report through the official user interface package xhprof-0.9.2/xhprof_html/:
To view reports where run_id is and namespace is , visit URL:
The meaning of each column is as follows:
Inclusive Time (or subtree execution time): All execution time including subtree execution time.
Exclusive Time/Self Time: The time spent in function execution itself. Excludes subtree execution time.
Wall time: also known as elapsed time or wall clock time. www.2cto.com
CPU time: CPU time in user space + CPU time in kernel space.
You can also view the graphical performance analysis report (the highlighted path intuitively reflects the largest performance loss path in the function call stack):
4. Extended reading
Use PHP performance testing tool XHProf in production environment
Ideas about improving the usage of XHProf
XHProf file (draft)
http://www.bkjia.com/PHPjc/477642.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/477642.htmlTechArticleUse PHP extension XHProf to implement function-level performance monitoring. Quoting the official description of XHProf: XHProf is a function-level hierarchical profiler for PHP and has a simple HTML based navi...