Optimiser la vitesse d'une application PHP par l'Opcode XCache
XCache est un cache d'opcode, qui accélère les performances des applications PHP.
Il conserve en mémoire le résultat de la compilation des scripts PHP pour les appels ultérieurs.
Les pages PHP sont alors exécutées environ 5 fois plus rapidement et la charge du serveur est ainsi réduite en évitant la recompilation systématique et en utilisant les programmes en cache. Cet article présente la mise en oeuvre de cette optimisation et la mesure des performances réelles.
Installer XCache
XCache a été initialement développé pour le serveur Web Lighttpd, un petit serveur web simple et rapide idéal pour les sites sans contrainte d'audience mais il peut être utilisé avec un serveur Web Apache.
Pour un serveur Apache2 sous Ubuntu Feisty 7.04, le paquet s'installe comme il suit :
audo apt-get install php5-xcache
La release 1.0.3 de XCache ne se configure pas automatiquement lors de l'installation. Il faut créer manuellement le fichier xcache.ini dans le répertoire /etc/php5/apache2/conf.d et faire un lien symbolique vers xcaches.so.
[xcache-common]
extension = xcache.so ; La librairie est copiee dans `/etc/php5/apache2/conf.d`
[xcache.admin]
xcache.admin.user = "admin"
;xcache.admin.pass = md5($your_password)
xcache.admin.pass = "xxxxxxx6d956dee1b4cdbc9d6da3"
[xcache]
xcache.shm_scheme = "mmap"
xcache.size = 64M ; set to cpu count (cat /proc/cpuinfo |grep -c processor)
xcache.count = 2
xcache.slots = 8K ; ttl of the cache item, 0=forever
xcache.ttl = 0 ; interval of gc scanning expired items, 0=no scan, other values is in seconds
xcache.gc_interval = 0 ; same as aboves but for variable cache
xcache.var_size = 2M
xcache.var_count = 2
xcache.var_slots = 8K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.test = Off ; N/A for /dev/zero
xcache.readonly_protection = Off
xcache.mmap_path = "/tmp/xcache"
xcache.coredump_directory = "" ; per request settings
xcache.cacher = On
xcache.stat = On
xcache.optimizer = On
[xcache.coverager]
xcache.coverager = Off
xcache.coveragedump_directory = ""
Relancer le serveur Web :
/etc/init.d/apache2 force-reload
Pour valider que XCache est actif, utiliser le classique fichier phpinfo.php
<\?php //remove \
phpinfo();
?>
Vous devez trouver l'information suivante
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
with XCache v1.2.2, Copyright (c) 2005-2007, by mOo
Installer la console d'administration xcache-admin
La console d'administration permet d'ajuster les réglages de XCache.
Dans le fichier de configuration du virtual-host Apache, ajouter la déclaration de la configuration de la console d'administration de XCache.
Alias /xcache-admin/ /usr/share/doc/php5-xcache/misc/admin/
<Directory "/usr/share/doc/php5-xcache/misc/admin">
Options Indexes MultiViews
</Directory>
Relancer Apache
/etc/init.d/apache2 force-reload
Et accéder à la console http://localhost/xcache-admin/index.php
En une heure, le hit ratio a atteint 99.3 % et 65.000 compilations de scripts évitées sur mon serveur.
Mesure de performance
Le but de cette mesure est de contrôler un éventuel gain de vitesse pure.
La robustesse immédiate, dans la durée et la scabilité sont ignorés dans ce test.
Le protocole est le suivant :
- avec et sans activation de xcache,
- 100 connexions sont lancées sur le serveur 3 fois de suite.
- La dernière mesure est prise en compte.
L'outil de test de charge httperf est utilisé :
httperf --hog --num-con=100 --server=www.strategic-management.fr
Les résultats sans XCache sont :
Total: connections 100 requests 100 replies 100 test-duration 3.182 s
Connection rate: 31.4 conn/s (31.8 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 28.1 avg 31.8 max 53.0 median 31.5 stddev 2.9
Connection time [ms]: connect 2.3
Connection length [replies/conn]: 1.000
Request rate: 31.4 req/s (31.8 ms/req)
Request size [B]: 80.0
Reply rate [replies/s]: min 0.0 avg 0.0 max 0.0 stddev 0.0 (0 samples)
Reply time [ms]: response 21.8 transfer 7.7
Reply size [B]: header 535.0 content 17009.0 footer 2.0 (total 17546.0)
Reply status: 1xx=0 2xx=100 3xx=0 4xx=0 5xx=0
CPU time [s]: user 0.18 system 2.79 (user 5.5% system 87.7% total 93.3%)
Net I/O: 540.8 KB/s (4.4*10^6 bps)
Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
Les résultats avec XCache donnent :
Total: connections 100 requests 100 replies 100 test-duration 1.785 s
Connection rate: 56.0 conn/s (17.8 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 14.7 avg 17.8 max 35.1 median 17.5 stddev 2.8
Connection time [ms]: connect 2.8
Connection length [replies/conn]: 1.000
Request rate: 56.0 req/s (17.8 ms/req)
Request size [B]: 80.0
Reply rate [replies/s]: min 0.0 avg 0.0 max 0.0 stddev 0.0 (0 samples)
Reply time [ms]: response 7.7 transfer 7.3
Reply size [B]: header 535.0 content 17009.0 footer 2.0 (total 17546.0)
Reply status: 1xx=0 2xx=100 3xx=0 4xx=0 5xx=0
CPU time [s]: user 0.09 system 1.55 (user 4.9% system 86.7% total 91.7%)
Net I/O: 964.4 KB/s (7.9*10^6 bps)
Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
Résultats du test de charge simplifié
Ces mesures montrent que l'usage de XCache :
- permet de doubler le nombre de connexions à la seconde
- offre des temps de réponse plus stable
- multiplie la vitesse de réponse du script PHP par 3
- consomme deux fois moins de CPU
A consommation CPU identique, le cache d'opcode XCache multiplie par 6 la capacité du serveur.
- Ajouter un commentaire
- 1771 lectures
-


Commentaires
Bonjour, Sous la 9.04, l'installation de XCache s'effectue correctement. Plus besoin de créer manuellement le lien symbolique.
Very good post, thanks a lot.
yw
Have a good day