<?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>niebegeg.net &#187; FastCGI</title>
	<atom:link href="http://niebegeg.net/tags/fastcgi/feed/" rel="self" type="application/rss+xml" />
	<link>http://niebegeg.net</link>
	<description>Mein Leben im Entwicklerland</description>
	<lastBuildDate>Thu, 03 May 2012 18:41:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Drupal-Performance-Odysee mit Happy-End</title>
		<link>http://niebegeg.net/2009/03/27/drupal-performance-odysee-mit-happy-end/</link>
		<comments>http://niebegeg.net/2009/03/27/drupal-performance-odysee-mit-happy-end/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 21:05:55 +0000</pubDate>
		<dc:creator>Dirk Rüdiger</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[D6]]></category>
		<category><![CDATA[FastCGI]]></category>
		<category><![CDATA[Lighttd]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Profiling]]></category>
		<category><![CDATA[xdebug]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Mit dem Update unseres Intranet-Portals von D5 auf D6 und dem gleichzeitigen Umzug der Installation von einem virtuellen Webserver (Xen+Linux) auf einen physischen Server (auch Linux, identische Hardware) handelte ich mir einen totalen Einbruch der Performance der Seite ein. Ein “normaler” Seitenaufruf dauerte ~7 Sekunden, für die Startseite (mit Panels voller Views-Blöcke) dauerte das Laden [...]]]></description>
			<content:encoded><![CDATA[<p>Mit dem Update unseres Intranet-Portals von D5 auf D6 und dem gleichzeitigen Umzug der Installation von einem virtuellen Webserver (Xen+Linux) auf einen physischen Server (auch Linux, identische Hardware) handelte ich mir einen totalen Einbruch der Performance der Seite ein. Ein “normaler” Seitenaufruf dauerte ~7 Sekunden, für die Startseite (mit Panels voller Views-Blöcke) dauerte das Laden ~13 Sekunden. Somit war das Intranet-Portal praktisch unbenutzbar.</p>

<p>Nachdem ich mich von dem schrecken erholt hatte, begann ich mit der Ursachenforschung.</p>

<p>Den Einstieg bekam ich mit Ingos <a href="http://blog.windfluechter.net/index.php?/archives/320-Performance-Tweaking-with-Drupal.html">Blog-Eintrag</a>.</p>

<p>Von dort ging es weiter zu http://2bits.com/articles/drupal-performance-tuning-and-optimization-for-large-web-sites.html und dem sichten der extra-langen Liste nach anwendbaren Vorschlägen.</p>

<p>Mein erster Kandidat war die MySQL-Datenbank. Sie läuft auf dem selben Rechner wie der Web-Server also keine zu überprüfende Netzwerk-Kommunikation. Also nahm ich das <a href="http://www.day32.com/MySQL/">tuning-primer.sh-Skript</a> und optimierte den DB-Server, so lange mir die Vorschläge plausibel erschienen und endlich alle Tests <span style="color: green;">auf Grün standen</span>. <strong>Keine Verbesserung.</strong></p>

<p>Auch zeigte das <a href="http://drupal.org/project/devel">devel.module</a>, dass nur ein Bruchteil der Ladezeit für die SQL-Queries benötigt wurde.</p>

<p>Als nächstes (wenige Tage später) nahm ich mir den Apache vor. Auf ihm laufen neben PHP-Skripten (drupal, phpmyadmin) auch diverse Python-Apps und ein Scalix mit Tomcat-Servlet-Connector. Ich entfernte alle Apache-Erweiterungen, die nicht unbedingt benötigt werden (z.B. <em>mod_userdir</em> und <em>mod_info</em>). Dann noch <em>.htaccess</em>-Konfigurationen in die statische Server-Konfiguration übernommen und <a href="http://eaccelerator.net/">eaccelerator</a> installiert. <strong>Keine Verbesserung.</strong></p>

<p>Zwischendurch habe ich ein Benchmark eingeschoben, um von der “gefühlten” Trägheit des Servers zu vergleichbaren Werten zu kommen und vielleicht schon kleine Verbesserungen wahrnehmen zu können.</p>

<p>Das Ergebnis:</p>

<pre class="bash" style="font-family:monospace;">ab <span style="color: #660033;">-n50</span> <span style="color: #660033;">-c2</span> <span style="color: #660033;">-dS</span> http:<span style="color: #000000; font-weight: bold;">//</span>portal.firma.de<span style="color: #000000; font-weight: bold;">/</span>node<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">111</span>
...
Connection Times <span style="color: #7a0874; font-weight: bold;">&#40;</span>ms<span style="color: #7a0874; font-weight: bold;">&#41;</span>
              min   avg   max
Connect:       <span style="color: #000000;">49</span>   <span style="color: #000000;">105</span>   <span style="color: #000000;">302</span>
Processing: <span style="color: #000000;">11182</span> <span style="color: #000000;">12339</span> <span style="color: #000000;">16441</span>
Total:      <span style="color: #000000;">11231</span> <span style="color: #000000;">12444</span> <span style="color: #000000;">16743</span></pre>

<p>Frustrierend!</p>

<p>Ich hatte als nächstes den verdacht, dass der Apache (2.0.18) mit der Multifunktionalität zu kämpfen hat und nicht gleichzeitig ein guter PHP- und Servlet-Host sein kann. Außerdem wollte ich mal <em>lighttpd</em> und <em>FastCGI</em> testen, weil das bei vielen Performance-Reports als Alternative genannt wird (unabhängig von einander). So hatte ich <em>lighttpd+FastCGI</em> auf Port 81 installiert und auf die identische Code-Basis losgeschickt. Der Benchmark ergab: <strong>Keine Verbesserung</strong>.</p>

<p>Nun, nach ein paar weiteren Bedenk-Tagen bin ich zu der festen Überzeugung gekommen, dass das Problem im Drupal zu finden war. So habe ich nach weiterem <a href="http://groups.drupal.org/node/20494">Literaturstudium</a> hatte ich dann den entscheidenden Tipp gefunden: http://civicactions.com/blog/2009/feb/10/profiling_drupal.</p>

<p>So kopierte ich die gesamte Drupal-Installation auf mein Notebook (zur Vereinfachung der ganzen Sache), installierte “xdebug“http://www.xdebug.org/, aktivierte das <a href="http://www.xdebug.org/docs/profiler">Generieren von Profiling-Informationen</a> und installierte <a href="http://kcachegrind.sf.net/">kcachegrind</a> (<span class="caps">KDE</span>, Linux). Und ziemlich schnell war klar, dass der Performance-Engpass durch das Modul <a href="http://drupal.org/project/og_content_type_admin">og_content_type_admin</a> verursacht wurde, welches in <a href="http://api.drupal.org/api/function/hook_init">hook_init</a> jedes mal die Funktion “menu_router_rebuild” aufruft. Als ich diesen Aufruf testweise auskommentierte, <strong>hatte ich kein Performance-Problem mehr!</strong></p>

<p>Ein nochmaliger Benchmark lieferte überzeugende Ergebnisse:</p>

<pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># ab -n50 -c2 -dS http://portal.firma.de/node/111</span>
...
Connection Times <span style="color: #7a0874; font-weight: bold;">&#40;</span>ms<span style="color: #7a0874; font-weight: bold;">&#41;</span>
              min   avg   max
Connect:       <span style="color: #000000;">90</span>   <span style="color: #000000;">105</span>   <span style="color: #000000;">148</span>
Processing:  <span style="color: #000000;">1279</span>  <span style="color: #000000;">1470</span>  <span style="color: #000000;">2139</span>
Total:       <span style="color: #000000;">1369</span>  <span style="color: #000000;">1575</span>  <span style="color: #000000;">2287</span></pre>

<p>Mit 1,5 Sekunden Seiten-Ladezeit kann ich sehr gut leben :)</p>

<p>Das Problem ist <a href="http://drupal.org/node/330135">den Entwicklern übrigens bekannt</a>, allerdings ist das Ticket geschlossen und die vorgeschlagene Lösung hat bei mir keine Verbesserung gebracht. So habe ich mich von der Funktionalität leichten Herzens getrennt.</p>

<p><a href="https://dirkr.fornax.uberspace.de/wp-content/uploads/2009/03/screenshot-kcachegrind.png"><img src="https://dirkr.fornax.uberspace.de/wp-content/uploads/2009/03/screenshot-kcachegrind-300x218.png" alt="Screenshot KCachegrind" title="Screenshot KCachegrind" width="300" height="218" class="alignleft size-medium wp-image-689" /></a></p>
<div class="betterrelated"><p><strong>Ähnliche Beiträge:</strong></p>
<ol><li> <a href="http://niebegeg.net/2009/12/17/suchen-auf-drupal-sites-macht-spass-mit-apache-solr/" title="Permanent link to Suchen auf Drupal-Sites macht Spaß mit Apache Solr!">Suchen auf Drupal-Sites macht Spaß mit Apache Solr!</a>  </li>
<li> <a href="http://niebegeg.net/2008/04/02/warum-ich-mich-fuer-einen-palm-centro-entschieden-habe-und-es-wieder-tun-wuerde/" title="Permanent link to Warum ich mich für einen Palm Centro entschieden habe &#8230; und es wieder tun würde!">Warum ich mich für einen Palm Centro entschieden habe &#8230; und es wieder tun würde!</a>  </li>
<li> <a href="http://niebegeg.net/2010/09/30/quickstart-drupal/" title="Permanent link to Quickstart Drupal">Quickstart Drupal</a>  </li>
<li> <a href="http://niebegeg.net/2008/01/15/happy-birthday-drupal/" title="Permanent link to Happy birthday, Drupal!">Happy birthday, Drupal!</a>  </li>
<li> <a href="http://niebegeg.net/2010/12/12/aktive-drupal-website-auf-den-pc-spiegeln/" title="Permanent link to Aktive Drupal-Website auf den PC spiegeln">Aktive Drupal-Website auf den PC spiegeln</a>  </li>
</ol></div> <p><a href="https://niebegeg.net/?flattrss_redirect&amp;id=108&amp;md5=0ec54672966041853a02f90e220628f7" title="Flattr" target="_blank"><img src="http://niebegeg.net/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://niebegeg.net/2009/03/27/drupal-performance-odysee-mit-happy-end/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dirkr&amp;popout=1&amp;url=http%3A%2F%2Fniebegeg.net%2F2009%2F03%2F27%2Fdrupal-performance-odysee-mit-happy-end%2F&amp;language=de_DE&amp;category=text&amp;title=Drupal-Performance-Odysee+mit+Happy-End&amp;description=Mit+dem+Update+unseres+Intranet-Portals+von+D5+auf+D6+und+dem+gleichzeitigen+Umzug+der+Installation+von+einem+virtuellen+Webserver+%28Xen%2BLinux%29+auf+einen+physischen+Server+%28auch+Linux%2C+identische+Hardware%29+handelte+ich...&amp;tags=Apache%2CD6%2CDrupal%2CFastCGI%2CLighttd%2CMySQL%2CPerformance%2CPHP%2CProfiling%2Cxdebug%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>

