Skip to content
XHGUI is a GUI for the XHProf PHP extension, using a database backend, and pretty graphs to make it easy to use and interpret.
Find file
New pull request
#92 Compare This branch is 307 commits ahead, 64 commits behind phacility:master.
Latest commit 560bca7 @preinheimer Merge pull request #91 from aik099/86-warnings-during-request-display…

Handle multi-dimensional array during request data printing



This is a graphical front end designed to store and present the profiling information provided by the Facebook created XHProf profiling tool.

Related Tools

  • XHGui - Uses MongoDB as a backend (rather than MySQL)
  • - Uses MySQL backend, more normalized storage schema

Project Includes

  • It includes a header.php document you can use with PHP's auto_prepend_file directive. It sets up profiling by initilizing a few variables, and settting register_shutdown_function with the footer. Once started profiles are done when requested (?_profile=1), or randomly. Profiled pages display a link to their profile results at the bottom of the page (this can be disabled on a blacklist based for specific documents. e.g. pages generating XML, images, etc.).
  • For tips on including header.php on an nginx + php-fpm install take a look at:
  • The GUI is a bit prettier (Thanks to Graham Slater)
  • It uses a MySQL backend, the database schema is stored in xhprof_runs.php
  • There's a frontend to view different runs, compare runs to the same url, etc.

Key Features

  • Listing 25, 50 most recent runs
  • Display most expensive (cpu), longest running, or highest memory usage runs for the day
  • It introduces the concept of "Similar" URLs. Consider:
  • Highcharts is used to graph stats over requests for an easy heads up display.


Besides a simple PHP running on your favourite web server you will also need following packages:

  • php5-xhprof
  • php5-mysql
  • graphviz (uses dot to generate callgraphs)


  • Install your favourite mix of PHP and web server
  • Install MySQL server
  • Clone the project to some folder
  • Map the sub folder xhprof_html to be accessible over HTTP
  • Move xhprof_lib/config.sample.php to xhprof_lib/config.php
  • Edit xhprof_lib/config.php
    • Update the SQL server configuration
    • Update the URL of the service (should point to xhprof_html over HTTP)
    • Update the dot_binary configuration - otherwise no call graphs!
    • Update the controlIPs variable to enable access.
    • For a development machine you can set this to false to disable IP checks.
  • Import the DB schema (it is just 1 table)
  • Add a PHP configuration to enable the profiling
    • If using Apache you can edit your virtual host configuration
    • Add php_admin_value auto_prepend_file "/path/to/xhprof/external/header.php"
  • Visit http://your-server/xhprof/xhprof_html/ and be amazed!
    • To get profiler information showing up there visit your page with a GET variable _profile=1.
    • For example http://localhost/?_profile=1

We Are Working On

  • The aggregation functionality is ignored completely
  • The code is... a mess. Deadlines do that to you, we're working on it
  • The default table schema isn't indexed all the places it needs to be
  • Easier ways to diff URLs
Something went wrong with that request. Please try again.