Drupal performance tweaking - APC

Er bestaan een aantal mogelijkheden om de performantie van je drupal site aanzienlijk te verbeteren. Een van de meest eenvoudige manieren, is door APC te installeren. Klanten van Robusta Hosting kunnen direct gebruik maken van deze voordelen, vermits we APC standaard aanbieden aan al onze shared hosting klanten.

APC staat voor Alternative PHP Cache, en is een caching mechanisme voor de gecompileerde PHP code. In CMS systemen zoals drupal is de meeste code afgeschermd voor de gebruiker, en deze code verandert dus ook niet zo vaak. Om deze code dan telkens van het filesysteem te gaan lezen, en te laten compileren door de PHP compiler, is een hoop overbodig werk, vermits de code meestal niet gewijzigd is t.o.v. de vorige keer dat de code uitgevoerd werd. Vandaar dat je dan ook zo'n opmerkelijke resultaten kan behalen met gewoonweg de APC module te installeren.

Een voorbeeldje van de performantieverbetering door APC vind je hieronder. Voor onze site hebben we de responsetijd kunnen terugbrengen van ca. 630 ms naar gemiddeld 520 ms.

Installatie van APC

Installatie van APC is vrij eenvoudig als je pear geïnstalleerd hebt. Installatie van pear is voorzien in onderstaande install script

echo "Installing dependencies"
apt-get -y install php-pear php5-dev apache2-dev

echo "Installing apc"
pecl install apc

Na de installatie moet je er ook voor zorgen dat php gebruik kan maken van de nieuw geïnstalleerde module. Dit kan je doen door volgende regels aan je php.ini toe te voegen:

extension=apc.so 'Voegt de apc module toe
apc.enabled=1    'Activeer de apc module
apc.shm_size=48M 'Ken 48 MB geheugen toe aan de apc module
apc.rfc1867 = 1  'Laat toe om uploadvoortgang weer te geven in drupal

Daarna nog je apache herstarten, en je bent klaar op APC te gebruiken.

/etc/init.d/apache2 restart

Tweaking

De bovenstaande settings kennen 48 MB geheugen toe aan je APC cache. Voor de meeste drupal-installaties is dit genoeg, maar als je veel modules geïnstalleerd hebt, kan dit niet voldoende blijken, en zal je deze setting moeten verhogen. Een handig hulpmiddel om dit op de volgen, is de apc.php pagina die meegeleverd is met het apc package (als je dit niet terugvindt, je kan het apc package downloaden van http://pecl.php.net/package/APC). Als je vaststelt dat quasi je volledige geheugen gebruikt is, terwijl je nog steeds niet boven de 90% hits geraakt, weet je dat je best je geheugensettings verhoogt. Een grafiek zoals hieronder geeft aan dat je geheugensettings zeer ruim zijn ingesteld, en je niet gauw tegen limieten zal oplopen.

APC Cache statistics

Extra: gescripte installatie voor Virtualmin

Voor mensen die verschillende websites hosten op een Virtualmin omgeving, en die al deze sites willen laten profiteren van APC, kan onderstaand script nuttig zijn. Dit script installeert APC op de server (of update naar de laatste versie als het al geïnstalleerd zou zijn). Vervolgens zal het voor alle bestaande servers de php.ini settings updaten zodat APC ingeschakeld wordt. Tenslotte wordt ook de hulppagina apc.php in de homefolder van alle websites geplaatst.

Wanneer alle changes uitgevoerd zijn, wordt apache herstart om de nieuwe settings van kracht te laten worden.

#!/bin/sh
# This is a comment
echo "Downloading apc.php"
wget -O /tmp/apc.tgz http://pecl.php.net/get/APC-3.1.13.tgz
tar zxvf /tmp/apc.tgz

echo "Installing dependencies"
apt-get -y install php-pear php5-dev apache2-dev

echo "Installing apc"
pecl install apc

echo "Adding extension=apc.so to each php.ini"
cd /home
for dir in "/home"/*; do
    if test -d "$dir"; then
        if [ -d "$dir/etc" ]; then
            echo "Updating the php settings in $dir/etc/php.ini"
            echo "extension=apc.so" >> $dir/etc/php.ini
            echo "apc.enabled=1" >> $dir/etc/php.ini
            echo "apc.shm_size=48M" >> $dir/etc/php.ini
            echo "apc.rfc1867 = 1" >> $dir/etc/php.ini
            cp /tmp/APC-3.1.13/apc.php $dir/public_html/apc.php
            myname=`stat -c '%U' $dir`
            chown $myname:$myname $dir/public_html/apc.php
        fi
    fi
done

echo "Restarting Apache"
/etc/init.d/apache2 restart

Wil je de volledige controle over jouw website? Neem eens een kijkje bij onze aantrekkelijk geprijsde virtual servers.

Reactie toevoegen