eAccelerator est un système de cache d'op-codes. Euh mais un op-code c'est quoi ?
Op-code signifie “opération-code”. A l'issue d'une compilation, le code PHP est transformé en listes d'instructions élémentaires destinées à être exécutées. Ces listes d'instructions sont précisément appelées “tableaux d'op-codes”. En d'autres termes, les op-codes sont un intermédiaire entre le code PHP que nous connaissons et les instructions du processeur, bien que plus proches des instructions processeur que du code PHP original.
Source : Magazine Programmez N°92 (Décembre 2006).
L'utilisation d'un système de cache va optimiser des étapes redondantes telles que le parsing ou la compilation de vos scripts PHP.
La mise en cache permet de produire des tableaux d'op-codes identiques jusqu'à modification de votre script, ces tableaux seront stockés dans la mémoire vive ou sur le disque dur et seront appelés lors de la seconde exécution de votre script.
En général l'utilisation d'un système de cache augmente de 3 à 4 fois la vitesse d'exécution de vos scripts, cependant ne pensez pas que ce genre de pratique réglera tous vos problèmes car un script mal écrit le restera toujours même avec un système de cache.
eAccelerator est basé sur l'extension MMCache.
Il n'y a pas encore de paquet pour la version 5 de PHP, nous allons donc travailler à partir des sources.
L'installation est assez simple rassurez-vous. ;)
Afin de pouvoir compiler eAccelerator nous allons avoir besoin des paquets “php5-dev” et “make” qui contiennent les outils nécessaires, notamment phpize.
Une petite vérification de sa présence sur le dépôt.
# aptitude show php5-dev
Résultat :
16:28 root@serveur ~# aptitude show php5-dev Paquet : php5-dev Nouveau: oui État: installé Automatiquement installé: non Version : 5.2.1-0.dotdeb.1 Priorité : optionnel Section : devel Responsable : Guillaume Plessis <gui@php.net> Taille décompressée : 3113k Dépend: autoconf, automake1.4, libssl-dev, libtool, shtool, php5-common (>= 5.2.1-0.dotdeb.1) Description : Files for PHP5 module development This package provides the files from the PHP5 source needed for compiling additional modules. PHP5 is an HTML-embedded scripting language. Much of its syntax is borrowed from C, Java and Perl with a couple of unique PHP-specific features thrown in. The goal of the language is to allow web developers to write dynamically generated pages quickly.
Installation des paquets.
# aptitude install php5-dev make
Une fois le paquet installé, nous allons passer au téléchargement des sources d'eAccelerator pour l'installer, actuellement la version du programme est 0.9.5.3.
# cd /usr/src/ # wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
Une fois les sources téléchargées on les décompresse (le paquet bzip2 est nécessaire pour décompresser un .bz2).
# tar xvjf eaccelerator-0.9.5.3.tar.bz2
Nous obtenons un répertoire eaccelerator-0.9.5.3, plaçons-nous dedans et commençons l'installation.
phpize va générer les fichiers nécessaires à la compilation.
# /usr/bin/phpize
Résultat :
16:37 root@serveur /usr/src/eaccelerator-0.9.5.3# /usr/bin/phpize Configuring for: PHP Api Version: 20041225 Zend Module Api No: 20060613 Zend Extension Api No: 220060519
Une fois le fichier configure généré nous pouvons passer à la configuration de la compile, toujours dans le même répertoire.
# ./configure --enable-eaccelerator=shared --with-eaccelerator-sessions --with-eaccelerator-optimizer --with-eaccelerator-info --with-php-config=/usr/bin/php-config
Depuis la version 0.9.5 la prise en charge des sessions n'est plus automatique, nous avons donc ajouté l'option –with-eaccelerator-sessions.
# ./configure --enable-eaccelerator=shared --with-eaccelerator-info --with-php-config=/usr/bin/php-config
# ./configure --enable-eaccelerator=shared --with-eaccelerator-info --with-php-config=/usr/bin/php-config --without-eaccelerator-use-inode
Une fois le configure terminé nous pouvons passer à la compilation en elle même.
# make # make install
Le make install devrait vous retourner ceci :
16:45 root@serveur /usr/src/eaccelerator-0.9.5.3# make install Installing shared extensions: /usr/lib/php5/20060613/
Si tel est le cas alors eAccelerator est maintenant installé sur votre serveur.
La configuration est quand à elle un peu plus complexe car une mauvaise configuration peut contrairement à l'effet espéré dégrader les performances !
Tout se passe dans le fichier de configuration de PHP à savoir php.ini qui se trouve dans /etc/php5/apache2/, ouvrez-le puis ajoutez-y ceci à la fin :
extension="eaccelerator.so" eaccelerator.shm_size = "32" eaccelerator.cache_dir = "/var/www/eaccelerator" eaccelerator.enable = "1" eaccelerator.optimizer = "1" eaccelerator.check_mtime = "1" eaccelerator.debug = "0" eaccelerator.filter = "" eaccelerator.shm_max = "1M" 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 = "/var/www/" eaccelerator.log_file = "/var/log/apache2/eaccelerator.log"
Maintenant on créé le répertoire qui accueillera le contenu du cache.
# mkdir /var/www/eaccelerator # chown www-data:www-data /var/www/eaccelerator # chmod 755 /var/www/eaccelerator
Explications :
Relancez Apache.
# /etc/init.d/apache2 restart
En allant sur la page infos.php vous devriez voir apparaître ceci :
with eAccelerator v0.9.5.3, Copyright (c) 2004-2008 eAccelerator, by eAccelerator
Si ce n'est pas le cas vérifiez que la librairie soit bien déclarée dans le php.ini
Le panneau de contrôle d'eAccelerator consiste en une page PHP, cette page se trouve dans le répertoire eaccelerator-0.9.5.3 sous le nom control.php, placez cette page dans /var/www/ par exemple.
Il faut absolument ajouter la directive suivante dans le php.ini auquel cas une erreur sera affichée :
eaccelerator.allowed_admin_path = "/var/www/
/var/www/ détermine le répertoire ou se trouvera la page control.php
Pour accéder à cette page un mot de passe est demandé, vous pouvez le modifier en éditant la page control.php
Relancez Apache si vous venez de l'ajouter.
# /etc/init.d/apache2 restart
Voila à quoi vous attendre :
Si vous avez besoin de mémoire supplémentaire pour l'utilisation de vos scripts, vous pouvez augmenter la taille de la valeur eaccelerator.shm_size qui se trouve dans php.ini
Exemple :
eaccelerator.shm_size = "64"
Pour que cela fonctionne, il faut que la taille demandée soit inférieure ou égale à la taille de segment de mémoire partagé configurée au niveau noyau.
Vérifiez la taille actuelle.
# cat /proc/sys/kernel/shmmax
Résultat :
# 67108864
Si le résultat retourné est 33554432 alors il faut modifier le paramètre suivant dans /etc/sysctl.conf
kernel.shmmax = 67108864
Ou de façon temporaire :
# echo 67108864 > /proc/sys/kernel/shmmax
Merci Calimero pour cette précision.