Ainsi des optimisations sont possibles au niveau d'apache, de mysql, des disques durs ou pourquoi pas du noyau linux pour les plus avertis. C'est ce que l'on a coutume d'appeler du "tuning" avec des résultats variables et pas toujours simples à obtenir ou à quantifier.
Parmi toutes ces solutions, il existe un moyen assez simple et spectaculaire à mettre en place pour réduire de manière significative (parfois plus de 50%) le temps d'exécution d'un script. Il s'agit d'eaccelerator.
Qu'est ce qu'eaccelerator ?
Php étant un langage de script non compilé, il est plutôt lent à l'exécution. A chaque demande, le script est analysé, puis "compilé" en opcode (précompilé) avant d'être exécuté.Eaccelerator est un moteur de mise en cache d'opcode php. Lors de son premier appel sur un script php, eaccelerator intervient pour stocker en mémoire volatile ou physique une version pré-compilée du code php, de manière à gagner du temps lors des appels suivants.
A chaque exécution d'un script, eaccelerator vérifie si celui à été modifié depuis la dernière mise en cache et si ce n'est pas la cas, il exécute la version déjà compilée. D'où un gain de temps très significatif sauf pour la première exécution qui est en général assez longue (compilation + mise en cache).
Téléchargement
Eaccelerator est disponible depuis le site officiel ( http://eaccelerator.net ).Pour ce tuto j'ai utilisé la version 0.9.5.2 d'Eaccelerator avec Php 5 et Apache 2 sur Debian Etch.
On commence donc par télécharger la dernière version d'eaccelerator.
wget http://bart.eaccelerator.net/source/0.9.5.2/eaccelerator-0.9.5.2.tar.bz2
On installe ensuite le paquet php5-dev qui va nous fournir la commande phpize nécessaire pour la compilation d'eaccelerator.
apt-get install php5-dev
Installation
Eaccelerator doit être compilé. On va donc commencer par extraire le contenu de l'archivetar jxvf eaccelerator-0.9.5.2.tar.bz2
On va ensuite dans le dossier contenant les sources
cd eaccelerator-0.9.5.2
Puis on exécute les commandes suivantes :export PHP_PREFIX="/usr"
$PHP_PREFIX/bin/phpize
La commande phpize est utilisée pour préparer l'environnement de compilation pour une extension PHP.$PHP_PREFIX/bin/phpize
On peut ensuite compiler eaccelerator...
./configure \
--enable-eaccelerator=shared \
--with-php-config=$PHP_PREFIX/bin/php-config
make
--enable-eaccelerator=shared \
--with-php-config=$PHP_PREFIX/bin/php-config
make
... puis l'installer (en passant root !)
make install
Le script d'installation vous indique pour terminer à quel endroit a été copié le module (eaccelerator.so), soit quelque chose de ce genre :
Installing shared extensions: /usr/lib/php5/20060613+lfs/
La dernière étape consiste à indiquer à php où trouver et comment utiliser eaccelerator.
Le code source contient un fichier de configuration type d'eaccelerator. Il est pratique pour bien comprendre les différentes options mais un peu trop épais pour être clair en production ;-)
La solution la plus simple consiste à copier le fichier d'exemple dans le dossier de configuration de php :
cp eaccelerator.ini /etc/php5/conf.d/
Il faut ensuite modifier le fichier pour adapter la configuration. Vous pouvez également créer un fichier "from scratch" :
nano /etc/php5/conf.d/eaccelerator.ini
Config / Solution 1
Si vous modifiez le fichier d'origine, remplacez
eaccelerator.cache_dir = "/tmp/eaccelerator"
pareaccelerator.cache_dir = "/var/cache/eaccelerator"
Décommentez également la ligne...
extension="eaccelerator.so"
... et commentez la ligne
;zend_extension="/usr/lib/php4/eaccelerator.so"
Config / Solution 2
Si vous préférez créer un fichier de configuration "from scratch" :
extension="eaccelerator.so"
eaccelerator.shm_size = "0"
eaccelerator.cache_dir = "/var/cache/eaccelerator"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.debug = 0
eaccelerator.log_file = "/var/log/httpd/eaccelerator_log"
eaccelerator.name_space = ""
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "0"
eaccelerator.shm_prune_period = "0"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.keys = "shm_and_disk"
eaccelerator.sessions = "shm_and_disk"
eaccelerator.content = "shm_and_disk"
eaccelerator.allowed_admin_path = ""
eaccelerator.shm_size = "0"
eaccelerator.cache_dir = "/var/cache/eaccelerator"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.debug = 0
eaccelerator.log_file = "/var/log/httpd/eaccelerator_log"
eaccelerator.name_space = ""
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "0"
eaccelerator.shm_prune_period = "0"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.keys = "shm_and_disk"
eaccelerator.sessions = "shm_and_disk"
eaccelerator.content = "shm_and_disk"
eaccelerator.allowed_admin_path = ""
Pour terminer, rechargez la config d'apache
/etc/init.d/apache reload
Vous pouvez vérifier la prise en charge d'eaccelerator en affichant la version de php :
php -v
Vous devriez obtenir quelque chose du genre
with eAccelerator v0.9.5.2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
Et bien sûr vous devriez observer des gains significatifs de performances pour vos pages php...
Mise à jour
Si vous mettez à jour votre version de php (via apt/aptitude), n'oubliez surtout pas de recompiler eaccelerator sous peine de voir apache planter au redémarrage !export PHP_PREFIX="/usr"
$PHP_PREFIX/bin/phpize
./configure \
--enable-eaccelerator=shared \
--with-php-config=$PHP_PREFIX/bin/php-config
make clean
make
make install
$PHP_PREFIX/bin/phpize
./configure \
--enable-eaccelerator=shared \
--with-php-config=$PHP_PREFIX/bin/php-config
make clean
make
make install