<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rein&#039;s Cyberspaceplace &#187; benchmarking</title>
	<atom:link href="http://www.velt.org/archives/tag/benchmarking/feed" rel="self" type="application/rss+xml" />
	<link>http://www.velt.org</link>
	<description>PHP, electronics, embedded software, Mechanic Apes and more....</description>
	<lastBuildDate>Tue, 06 Apr 2010 17:46:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Localiseren van performance bottlenecks met XDebug en Cachegrind</title>
		<link>http://www.velt.org/archives/65</link>
		<comments>http://www.velt.org/archives/65#comments</comments>
		<pubDate>Tue, 16 Sep 2008 16:11:33 +0000</pubDate>
		<dc:creator>Rein</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[benchmarking]]></category>
		<category><![CDATA[Cachegrind]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[troubleshooting]]></category>
		<category><![CDATA[Valgrind]]></category>

		<guid isPermaLink="false">145 at http://velt.org</guid>
		<description><![CDATA[Regelmatig krijg ik van mijn opdrachtgevers het verzoek om te bepalen waarom een bepaalde PHP applicatie niet voldoende performance heeft. Om iets zinnigs over de performance bottlenecks in je applicatie te kunnen zeggen moet je gaan meten hoe lang PHP er over doet om bepaalde instructies uit te voeren. In dit document probeer ik uit [...]]]></description>
			<content:encoded><![CDATA[<p>Regelmatig krijg ik van mijn opdrachtgevers het verzoek om te bepalen waarom een bepaalde PHP applicatie niet voldoende performance heeft. Om iets zinnigs over de performance bottlenecks in je applicatie te kunnen zeggen moet je gaan meten hoe lang PHP er over doet om bepaalde instructies uit te voeren. In dit document probeer ik uit te leggen uit dat globaal in zijn werk gaat. </p>
<p><!--break--><br />
<br/><br />
<br/><br />
<br/></p>
<h3>Wat heb je nodig?</h3>
<p>Om een applicatie te kunnen profilen heb je een tweetal tools nodig</p>
<ul>
<li><a href="http://www.xdebug.org">Xdebug</a></li>
<li>Cachegrind (<a href="http://kcachegrind.sourceforge.net/cgi-bin/show.cgi">Kcachegrind voor Linux</a>, <a href="http://sourceforge.net/projects/wincachegrind/">WinCachegrind voor Windows</a>)</li>
</ul>
<p>Onder Ubuntu kun je deze installeren via de volgende twee commando&#039;s:</p>
<pre>
sudo apt-get install php5-xdebug
sudo apt-get install kcachegrind
</pre>
<p><br/><br />
<br/><br />
<br/></p>
<h3>Configureren</h3>
<p>
Je kunt de xdebug profiler aanzetten door de volgende regels toe te voegen aan php.ini</p>
<pre>
//hiermee zet je de xdebug profiler aan
xdebug.profiler_enable=1

//De volgende opties zijn optioneel
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_name="timestamp"
</pre>
<p>Enable trigger zorgt ervoor dat de applicatie aan een profile log aanmaakt indien de URL parameter <strong>XDEBUG_PROFILE</strong><br />
wordt meegegeven. Je kunt dus zelf bepalen welk script je wilt profilen. Profiler_output_name zorgt ervoor dat de profile log een timestamp in de bestandsnaam heeft zodat je snel kunt zien welke log de juiste is.
</p>
<p>
Als alles goed geinstalleerd is dan zal in de output van phpinfo() het volgende te zien zijn:</p>
<table border="1">
<tr>
<td>xdebug.profiler_append</td>
<td>Off</td>
<td>Off</td>
</tr>
<tr>
<td>xdebug.profiler_enable</td>
<td><strong>On</strong></td>
<td><strong>On</strong></td>
</tr>
<tr>
<td>xdebug.profiler_enable_trigger</td>
<td>Off</td>
<td>Off</td>
</tr>
<tr>
<td>xdebug.profiler_output_dir</td>
<td>/tmp</td>
<td>/tmp</td>
</tr>
<tr>
<td>xdebug.profiler_output_name</td>
<td>cachegrind.out.%p</td>
<td>cachegrind.out.%p</td>
</tr>
</table>
<p><br/><br />
<br/><br />
<br/></p>
<h3>Een simpel voorbeeld</h3>
<p>In het onderstaande voorbeeld zie je eens stukje script dat verbinding maakt met een MySQL database en een aantal records opvraagt<br />
<code><br />
<?php</p>
<p>	function test2()<br />
	{<br />
        	mysql_connect(&#039;localhost&#039;,&#039;username&#039;,&#039;secret&#039;);<br />
        	mysql_select_db(&#039;mysql&#039;);<br />
        	$queryresult=mysql_query("select * from help_keyword");<br />
        	while ($row=mysql_fetch_object($queryresult))<br />
        	{<br />
                	print_r($row);<br />
        	}<br />
	}</p>
<p>	test2();<br />
?><br />
</code><br />
Als je dit script uitvoert via je browser dan wordt er in de /tmp folder een cachegrind.out bestand gegenereerd. Dit bestand kan geopend worden met Cachegrind. In Cachegrind krijg je dan het volgende scherm te zien:<br/><br/><br />
<img src="http://phpgg.nl/files/images/Screenshot.preview.png" title="Cachegrind screenshot"/><br/><br />
<img src="http://phpgg.nl/files/images/output1_0.preview.png" title="Cachegrind output"/><br/><br/><br />
Je kunt nu per functie zien hoeveel processortijd het kost om hem uit te voeren. Hierdoor krijg je goed zicht op de functies die het meeste vertraging in je script veroorzaken.<br />
<br/><br />
<br/><br />
<br/></p>
<h3>Meer informatie over dit onderwerp</h2>
<ul>
<li><a href="http://kcachegrind.sourceforge.net/cgi-bin/show.cgi">KCachegrind website</a></li>
<li><a href="http://sourceforge.net/projects/wincachegrind/">WinCachegrind website</a></li>
<li><a href="http://www.xdebug.org/docs/profiler">Xdebug manual</a>, Derick Rethans</li>
<li><a href="http://talks.php.net/show/phpuk07/0">Fast and Rich (Web Applications with PHP 5)</a>, Rasmus Lerdorf</li>
</ul>
<ul class="socialwrap size24 row">
<li class="iconOnly share">share:</li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="delicious" href="http://delicious.com/post?url=http%3A%2F%2Fwww.velt.org%2Farchives%2F65&amp;title=Localiseren+van+performance+bottlenecks+met+XDebug+en+Cachegrind" title="Save on Delicious Localiseren van performance bottlenecks met XDebug en Cachegrind"><span class="head">Bookmark on Delicious</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="digg" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.velt.org%2Farchives%2F65&amp;title=Localiseren+van+performance+bottlenecks+met+XDebug+en+Cachegrind" title="Digg this post - Localiseren van performance bottlenecks met XDebug en Cachegrind"><span class="head">Digg this post</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="facebook" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.velt.org%2Farchives%2F65&#038;t=Localiseren+van+performance+bottlenecks+met+XDebug+en+Cachegrind" title="Share this post - Localiseren van performance bottlenecks met XDebug en Cachegrind"><span class="head">Recommend on Facebook</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="hyves" href="http://hyves-share.nl/button/tip/?tipcategoryid=12&#038;rating=5&#038;title=http%3A%2F%2Fwww.velt.org%2Farchives%2F65&#038;body=Localiseren+van+performance+bottlenecks+met+XDebug+en+Cachegrind" title="Tip this post via Hyves : Localiseren van performance bottlenecks met XDebug en Cachegrind"><span class="head">Tip on Hyves</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="mixx" href="http://www.mixx.com/submit?page_url=http%3A%2F%2Fwww.velt.org%2Farchives%2F65" title="Mixx it up : Localiseren van performance bottlenecks met XDebug en Cachegrind"><span class="head">Mixx it up</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="myspace" href="javascript:void(window.open('http://www.myspace.com/Modules/PostTo/Pages/?u='+encodeURIComponent(document.location.toString()),'ptm','height=450,width=440').focus())" title="Share on Myspace : Localiseren van performance bottlenecks met XDebug en Cachegrind"><span class="head">Share via MySpace</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="orkut" href="http://promote.orkut.com/preview?nt=orkut.com&#038;du=http%3A%2F%2Fwww.velt.org%2Farchives%2F65&#038;tt=Localiseren+van+performance+bottlenecks+met+XDebug+en+Cachegrind" title="Share via Orkut : Localiseren van performance bottlenecks met XDebug en Cachegrind"><span class="head">Share on Orkut</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="reddit" href="http://www.reddit.com/submit?url=http%3A%2F%2Fwww.velt.org%2Farchives%2F65&amp;title=Localiseren+van+performance+bottlenecks+met+XDebug+en+Cachegrind" title="Share on Reddit : Localiseren van performance bottlenecks met XDebug en Cachegrind"><span class="head">share via Reddit</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="stumble" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.velt.org%2Farchives%2F65&amp;title=Localiseren+van+performance+bottlenecks+met+XDebug+en+Cachegrind" title="Submit to stumble : Localiseren van performance bottlenecks met XDebug en Cachegrind"><span class="head">Share with Stumblers</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="twitter" href="http://twitter.com/home/?status=http%3A%2F%2Fwww.velt.org%2Farchives%2F65" title="Tweet this post - Localiseren van performance bottlenecks met XDebug en Cachegrind"><span class="head">Tweet about it</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="rss" href="http://www.velt.org/archives/65feed" title="Track this post - Localiseren van performance bottlenecks met XDebug en Cachegrind via RSS"><span class="head">Subscribe to the comments on this post</span></a></li>
</ul>
<div class="clean"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.velt.org/archives/65/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
