/xhprof_gui

Graphical interface for Xhprof

Primary LanguagePHPOtherNOASSERTION

XHProf UI

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

  • Commit this code on my fork on master branch
  • Keep the other code on VR branch, not 3D
  • Now to install and run locally
  • Debug features
  • Adding traces to the folder
  • Opening a trace
  • Graphviz
  • Xhprof extension repo
  • generating sample.php
  • creating config.php
  • Add screenshots to this readme
  • Mention the original repo with theme
  • Mention SVG is interactable, fast, searchable
  • Mention ability to click on the graph to filter
  • Mention algo to show all children
  • Mention algo to filter out in the first place, and avoid working with lots of data TODO
  • Make critical path work, even after filtering out functions
  • Make graph colorful based on calls to functions.
  • Add colors to lines too
  • Add the ability to filter by parents too, starting with lowest point and going backwards, which makes more sense than filtering by child. Add a toggle in the UI to choose the direcgtion.
  • When filtering by child, show connected parents for current function
  • When filtering by parent, show connected children for current function. This will allow to continue clicking and moving backwards if needed.
  • Why these two filters result in same graph>

Related Tools

  • XHGui - Uses MongoDB as a backend (rather than MySQL)

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: http://www.justincarmony.com/blog/2012/04/23/php-fpm-nginx-php_value-and-multiple-values/
  • 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.

Requirements

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)

Installation

  • 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)
  • See the SQL at xhprof_runs.php
  • 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