xhprof for PHP7 and PHP8

xhprof for PHP7 and PHP8

Build Status Build status


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.


This version supports PHP7 and PHP8


PHP Version

7.2

7.3

7.4

8.0

8.1

Installation

git clone https://github.com/longxinH/xhprof.git ./xhprof

cd xhprof/extension/

/path/to/php7/bin/phpize

./configure --with-php-config=/path/to/php7/bin/php-config

make && sudo make install

configuration add to your php.ini

[xhprof]

extension = xhprof.so

xhprof.output_dir = /tmp/xhprof

php.ini configuration

    Options      Defaults Version Explain

xhprof.output_dir  "" All Output directory

xhprof.sampling_interval  100000 >= v2.* Sampling interval to be used by the sampling profiler, in microseconds

xhprof.sampling_depth  INT_MAX >= v2.* Depth to trace call-chain by the sampling profiler

xhprof.collect_additional_info  0 >= v2.1 Collect mysql_query, curl_exec internal info. The default is 0. Open value is 1

Turn on extra collection

php.ini adds xhprof.collect_additional_info

xhprof.collect_additional_info = 1

Options

xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

XHPROF_FLAGS_NO_BUILTINS do not profile builtins

XHPROF_FLAGS_CPU gather CPU times for funcs

XHPROF_FLAGS_MEMORY gather memory usage for funcs

Example


<?php


array(

    "main()" => array(

        "wt" => 237,

        "ct" => 1,

        "cpu" => 100,

    )

)

wt The execution time of the function method is time consuming

ct The number of times the function was called

cpu The CPU time consumed by the function method execution

mu Memory used by function methods. The call is zend_memory_usage to get the memory usage

pmu Peak memory used by the function method. The call is zend_memory_peak_usage to get the memory

PDO::exec

PDO::query

mysqli_query

$mysqli = new mysqli("localhost", "my_user", "my_password", "user");

$result = $mysqli->query("SELECT * FROM user LIMIT 10");

Output data

mysqli::query#SELECT * FROM user LIMIT 10

PDO::prepare

Convert preprocessing placeholders for actual parameters, more intuitive analytic performance (does not change the zend execution process)


$_sth = $db->prepare("SELECT * FROM user where userid = :id and username = :name");

$_sth->execute([':id' => '1', ':name' => 'admin']);

$data1 = $_sth->fetch();


$_sth = $db->prepare("SELECT * FROM user where userid = ?");

$_sth->execute([1]);

$data2 = $_sth->fetch();

Output data

PDOStatement::execute#SELECT * FROM user where userid = 1 and username = admin

PDOStatement::execute#SELECT * FROM user where userid = 1

Curl

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com");

$output = curl_exec($ch);

curl_close($ch);

Output data

curl_exec#http://www.baidu.com


有话要说