Webgrind: Cross-platform Xdebug Profiling Web Frontend

Posted by on Apr 21, 2009 in Programming, Web Development7 comments

webgrind-titleI’m using Xdebug as my primary PHP debugger. I have it integrated into my Eclipse PDT IDE, and have also been using its profiling capabilities. Until recently, I’ve been using KCachegrind – which has a wonderfully diverse feature set – as my primary profile data visualisation tool. However, as a Gnome user, KCachegrind requires a lot of KDE libraries to be installed in order to run. KCachegrind can be installed easily on Debian based systems by running:

sudo apt-get install kcachegrind

Anyone who has installed KCachegrind on a Gnome system before, or who has just run the above command, can see that it takes approximately 250Mb (after installation – about 80Mb worth of archives to download) of additional libraries and packages in order to install. I still have it installed, and use it for more detailed analysis of profile data, but I recently stumbled across a fantastic alternative called Webgrind.

Installing Webgrind

Webgrind implements a subset of the KCachegrind features, and is great for a quick preview, or simple analysis of profile data. It’s written in PHP5, and as such leaves a very small footprint, and can be installed on any platform. To install, download the latest package (1.0 at the time of writing) – as usual I downloaded to my cluttered Desktop, which by now is brimming with things I’ve forgotten about, and whose purpose I no longer have any idea… Once downloaded, the package needs unpacking, and moving to the root web directory (/var/www in my case)

cd ~/Desktop
unzip webgrind-release-1.0.zip
sudo mv webgrind /var/www

Once installed, Webgrind can be accessed by pointing your web browser to http://localhost/webgrind


In order to profile an application, the Xdebug profiler needs switching on. This can be done by editing either the php.ini file, or in my case, a separate ini file specifically for Xdebug. Either way, the following line needs adding, so open up the ini file in a text editor, and add:

xdebug.profiler_enable = 1

Save the file and restart Apache:

sudo /etc/init.d/apache2 restart

Your PHP web application will now be profiled by Xdebug. By default, profile data will be saved in /tmp/cachegrind.out.%p (where %p is the pid). This can be changed by editing php.ini and adding the following directives:

xdebug.profiler_output_dir = /desired/output/directory/path
xdebug.profiler_output_name = desired.name.specifier

(See http://www.xdebug.org/docs/all_settings#trace_output_name for possible specifiers). To switch profiling off, simply edit the php.ini file, set  xdebug.profiler_enable to 0 and restart Apache.

Viewing Profile Data

Once profile data is available, Webgrind will automatically detect the latest profile, and give the option to display it. Point your web browser to http://localhost/webgrind. At the top are three pull down menus – the centre menu allowing us to select which profile data file to view. By default, it will automatically select the latest file, but others can be manually selected based not only on Xdebug’s default filename, but also by the actual PHP file profiled. Clicking the Update button will begin the analysis process (which may take some time depending on the size and complexity of the profile data) resulting in data being displayed in tabular format, which allows for drill down and sorting:


KCachegrind can be used for more detailed analysis, but for a quick view of potential bottlenecks in code, and considering its size, Webgrind is a fantastic starting point, which for me, picks out the most relevant data I need to analyse, which is sufficient 90% of the time.

Tags: ,