XHProf

Nguyen Tien Si

GO1

Agenda

  • What/Why/When??

  • Installing & Configuring

  • Introduction

  • Profiling using XHProf

  • Question?

 

What?

Profiling is measuring the relative performance of your application at the code-level. Profiling will capture things like CPU usage, memory usage, time and number of calls per function, as well as capturing a call graph.

Why?

Many common cause of slowdowns:

  • Databases (MySQL, PostgreSQL,...)

  • External Resources (APIs, Filesystems, ...)

  • Bad Code

 

We will be a waste of time for optimization

When?

  1. Do I have a performance issue?

  2. How big of a problem do I have?

Installing & Configuring

 
# Debian
sudo apt-get install php5-xhprof

# Pecl
sudo peer upgrade peer
sudo pecl install -f xhprof

# Enable inside php.ini
[xhprof]
extension=xhprof.so 
xhprof.output_dir="/tmp/xhprof"

# Restart web server
sudo apachectl restart

With Drupal

<?php
// With Drupal
// Add bottom at settings.php, shared by Andy Truong

if (extension_loaded('xhprof')) {
  define('XHPROF_KEY',    'profile');
  define('XHPROF_ROOT',   '/Users/mrsinguyen/Workspaces/www/xhprof');
  define('XHPROF_DOMAIN', 'localhost/xhprof/xhprof_html');
  define('XHPROF_SOURCE', $_SERVER['SERVER_NAME']);
  define('XHPROF_FLAGS',  XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);
  define('XHPROF_SYMBOL', 'menu_execute_active_handler');
  
  function user_init() {
    if (!empty($_GET[XHPROF_KEY])) {
      require_once XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
      require_once XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
      xhprof_enable(XHPROF_FLAGS);
    }
  }

  function system_exit() {
    if (!empty($_GET[XHPROF_KEY])) {
      $id = (new XHProfRuns_Default())->save_run(xhprof_disable(), XHPROF_SOURCE);
      echo sprintf(
        '<a href="//%s/?symbol=%s&source=%s&run=%s">%s</a>',
        XHPROF_DOMAIN, XHPROF_SYMBOL, XHPROF_SOURCE, $id, "XHProf #{$id}"
      );
    }
  }
}

With block of code

 
<?php

 
// Start profiling
if (extension_loaded('xhprof')) {
  define('XHPROF_ROOT', '/Users/mrsinguyen/Workspaces/www/xhprof');
  define('XHPROF_APP', 'block');
  define('XHPROF_FLAGS', XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);
  require_once XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
  require_once XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
  xhprof_enable(XHPROF_FLAGS);

  // The code need profile


  $id = (new XHProfRuns_Default())->save_run(xhprof_disable(), XHPROF_APP);
}

Support HHVM?

 

Yes, see more at http://docs.hhvm.com/manual/en/book.xhprof.php

Introduction

  • XHProf is a function-level hierarchical profiler for PHP and has a simple HTML based user interface

  • Originally developed at Facebook, XHProf was open sourced in Mar, 2009.

  • As you know: Xdebug is an active profiler and Xhprof is a passive profiler.

 

Xhprof provides:

 

Flat Profile

 

Function-level summary information such as number of calls, inclusive/exclusive wall time, memory usage, and CPU time.

 

Hierarchical Profile

 

For each function, it provides a breakdown of calls and times per parent (caller) & child (callee), such as:

  • what functions call a particular function and how many times?

  • what functions does a particular function call?

  • The total time spent under a function when called from a particular parent.

 

Hierarchical Profile

 

Diff Reports

 

A diff report takes two runs as input and provides both flat function-level diff information, and hierarchical information (breakdown of the diff by parent/children functions) for each function.

 

Callgraph View

 

The profile data can also be viewed as a callgraph. The callgraph view highlights the critical path of the program.

Memory Profile

 

XHProf's memory profile mode helps track functions that allocate lots of memory.

Limitations

 

XHProf keeps track of only 1-level of calling context (1-level up or 1-level down).

Profiling using XHProf

 

Profiling using XHProf

 

References

  • http://www.kam24.ru/xhprof/docs/

  • https://blog.engineyard.com/2014/profiling-with-xhprof-xhgui-part-2

  • https://pecl.php.net/package/xhprof

  • https://github.com/phacility/xhprof

  • https://gist.github.com/mrsinguyen/4b811a907ae0e915e25c - source code

Question?

 

Profiling PHP with XHProf

By Nguyen Tien Si

Profiling PHP with XHProf

Profiling PHP with XHProf

  • 1,843