Je passe à XCache

Soumis par bonvga le 25 novembre, 2007 - 03:17

Dernièrement, j'ai été amené à installer XCache sur ma dedibox à la place d'eAccelerator qui est actuellement incompatible avec PHP 5.2.5.

XCache comme eAccelerator sont des caches opcode php. Pour rappel php est langage scripté, il est normalement interprété à la volée par le parseur php. Les caches opcode permettent d'éviter cette étape de parsing. Pour plus de détails sur l'opcode rendez-vous sur cette page wikipedia.

Voyons comment installer et configurer XCache dans la suite de cet article.

L'installation de XCache sur une dedibox sous debian est très simple. Commencez par installer le paquet avec cette commande :

~ apt-get install xcache

Il faut ensuite configurer votre fichier php.ini et y déclarer les lignes suivantes :

zend_extension = "/usr/lib/php5/20060613/xcache.so"
xcache.admin.user = "admin_user_name"
xcache.admin.pass = "md5_password"
xcache.cacher = On
xcache.size = 64M
xcache.slots = 8K
xcache.ttl = 0
xcache.gc_interval = 0
xcache.var_size = 0
xcache.var_slots = 8K
xcache.var_ttl = 300
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.readonly_protection = Off
xcache.stat = On
xcache.mmap_path = "/dev/zero"
xcache.optimizer = Off

Ces paramètres déclarent un cache opcode de 64Mo. Il s'agit de la configuration pour mon serveur, elle n'est donc pas forcement adaptée au votre. Pour plus de détails sur les différentes options, rendez-vous sur cette page.

La fonctionnalité sympathique qu'on ne trouve pas avec eAccelerator c'est l'interface d'administration.

Cette interface permet de voir l'état du cache et aussi contrôler son contenu.

Petit bémol, quand j'ai installé le paquet XCache, je n'ai pas réussi à trouver l'interface d'administration, elle n'est peut être pas dans le paquet. Je suis donc passé par un checkout de XCache :

~ $ mkdir ~/src
~ $ cd ~/src
~/src $ svn co svn://svn.lighttpd.net/xcache/trunk xcache-trunk
~/src $ cd xcache-trunk
~/src/xcache-trunk $ ls

J'ai ensuite recopié le répertoire 'admin' dans un emplacement accessible par apache.

Je me suis ensuite penché sur le côté performances d'XCache avec un bon vieux apache bench.

Résultats d'un apache bench sans XCache :

~ ab -n 1000 -c 10 <a href="http://www.bonvga.net/xcache-test.php
This" title="http://www.bonvga.net/xcache-test.php
This">http://www.bonvga.net/xcache-test.php
This</a> is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, <a href="http://www.zeustech.net/
Copyright" title="http://www.zeustech.net/
Copyright">http://www.zeustech.net/
Copyright</a> 2006 The Apache Software Foundation, <a href="http://www.apache.org/

Benchmarking" title="http://www.apache.org/

Benchmarking">http://www.apache.org/

Benchmarking</a> <a href="http://www.bonvga.net" title="www.bonvga.net">www.bonvga.net</a> (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests


Server Software:        Apache/2.2.3
Server Hostname:        <a href="http://www.bonvga.net
Server" title="www.bonvga.net
Server">www.bonvga.net
Server</a> Port:            80

Document Path:          /xcache-test.php
Document Length:        11 bytes

Concurrency Level:      10
Time taken for tests:   20.389893 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      238000 bytes
HTML transferred:       11000 bytes
Requests per second:    49.04 [#/sec] (mean)
Time per request:       203.899 [ms] (mean)
Time per request:       20.390 [ms] (mean, across all concurrent requests)
Transfer rate:          11.38 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    3  26.4      0     401
Processing:     3  199 382.5     61    2017
Waiting:        0  196 382.9     60    2016
Total:         12  202 386.6     61    2017

Percentage of the requests served within a certain time (ms)
  50%     61
  66%     63
  75%     65
  80%     94
  90%   1000
  95%   1026
  98%   1729
  99%   2016
 100%   2017 (longest request)

Je note 49 requètes par secondes.

Voyons ce que ça donne avec XCache :

~ ab -n 1000 -c 10 <a href="http://www.bonvga.net/xcache-test.php
This" title="http://www.bonvga.net/xcache-test.php
This">http://www.bonvga.net/xcache-test.php
This</a> is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, <a href="http://www.zeustech.net/
Copyright" title="http://www.zeustech.net/
Copyright">http://www.zeustech.net/
Copyright</a> 2006 The Apache Software Foundation, <a href="http://www.apache.org/

Benchmarking" title="http://www.apache.org/

Benchmarking">http://www.apache.org/

Benchmarking</a> <a href="http://www.bonvga.net" title="www.bonvga.net">www.bonvga.net</a> (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests


Server Software:        Apache/2.2.3
Server Hostname:        <a href="http://www.bonvga.net
Server" title="www.bonvga.net
Server">www.bonvga.net
Server</a> Port:            80

Document Path:          /xcache-test.php
Document Length:        11 bytes

Concurrency Level:      10
Time taken for tests:   11.271439 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      238000 bytes
HTML transferred:       11000 bytes
Requests per second:    88.72 [#/sec] (mean)
Time per request:       112.714 [ms] (mean)
Time per request:       11.271 [ms] (mean, across all concurrent requests)
Transfer rate:          20.58 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       1
Processing:    11  111 205.4     58    1185
Waiting:       11  111 205.5     58    1184
Total:         11  111 205.4     58    1185

Percentage of the requests served within a certain time (ms)
  50%     58
  66%     60
  75%     63
  80%     75
  90%    148
  95%    791
  98%   1010
  99%   1018
 100%   1185 (longest request)

Je note 88 requètes par secondes avec XCache, c'est presque 2 fois plus que sans le support XCache !

Je n'ai pas comparé les performances entre XCache et eAccelerator car celles-ci doivent être très proche, mais ce dernier ne supportant pas encore php 5.2.5, j'adopte donc XCache.

Posté dans les catégories , , et

6 commentaires pour “Je passe à XCache”

Portrait de monkey

Le 26 novembre, 2007 - 02:31
monkey a écrit

Voila ! Il fallait que tu te la pètes ! Tongue
-----------------------------------------------------------------------------------
[BLOG] http://www.monsterfamily.fr

Portrait de Anonyme

Le 23 mai, 2008 - 15:52
sylv a écrit

Merci pour l'info, combiné à memcache sur du joomla 1.5 ca a boosté énormément mes perfs

Portrait de Anonyme

Le 13 mai, 2009 - 22:13
Le Blog du grand loup Zeur - Syn Flooding, optimisation PHP a écrit

[...] second lien avec une astuce pour installer le panel d’admin (qui n’est pas forcément dans les [...]

Portrait de bonvga

Le 14 mai, 2009 - 23:05
bonvga a écrit

Oh ! Un pingback ! Ça fait un bail ! Merci Gaëtan ! Laughing out loud

Portrait de Anonyme

Le 19 mai, 2009 - 08:41
globule a écrit

Est-ce recommandé en dev ?
Les fichiers modifiés sont-ils pris en compte immédiatement ?
Car il n'y a rien de plus frustrant que de devoir vider un cache à chque modif...

Portrait de bonvga

Le 19 mai, 2009 - 12:55
bonvga a écrit

Personnellement j'ai utilisé xcache uniquement en production.

Mais lors des mise à jour du code en production le cache est bien mis a jour aussi. Donc je pense qu'xcache reste utilisable en dev.

L'idéal est d'avoir un environnement de preprod identique à la prod et ainsi valider qu'xcache ne provoque pas d'effets de bord lié au cache ou autre.

Poster un nouveau

Le contenu de ce champ ne sera pas montré publiquement. If you have a Gravatar account, used to display your avatar.
  • Balises HTML autorisées: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <img> <strike> <blockquote>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les smileys texte sont replacés par des smyleys images.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Vous pouvez activer la coloration syntaxique du code source à l'aide des balises suivantes: <code>, <blockcode>, <as3>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <ini>, <java>, <javascript>, <mysql>, <php>, <plsql>, <python>, <robots>, <ruby>, <smarty>, <vb>, <xml>. The supported tag styles are: <foo>, [foo].
  • Les liens d'images avec le tag 'rel="lightbox"' dans la balise <a> apparaîtrons dans une Lightbox.

Plus d'informations sur les options de formatage