Le Forum Non Officiel de la DEDIBOX
Vous n'êtes pas identifié.
Bonjour,
Ne trouvant pas de benchmark sur le net , j'ai décidé de m'en faire un petit rapide pour tester les performances de ce bidule
Installation : bien callé dans le fond du fauteuil
Memcache est assez simple a installer quelques lignes de commandes, une modif du php.ini , un restart d'apache et roulez jeunesse
Tout se présente bien, on commence a faire la fête
Premiers pas
Déja contrairement à eaccelerator qui (lorsqu'il est compilé avec les options --with-eaccelerator-shared-memory) profite d'une mise en cache intégré a php sans connexion, memcache nous oblige a mettre une petite ligne de connexion (une option de connexion automatique eu été appréciée)
Ce qui fait qu'on doit se retrouver avec :
$memcache = memcache_connect('localhost', 11211) or die ("Connexion impossible");
pas génialissime pour l'utilisation au seins de librairie ou fonctions , obligé de faire un global ou de passer en parametre ... bouarf
Bon allez on se dis qu'on s'y fait, on test donc la bête :
Premiers tests
Le fichier de test execute l'affichage du contenu de 4 fichiers html de quelques ko chacuns
Script 1 :
<?
// testmemcache
$memcache = memcache_connect('localhost', 11211) or die ("Connexion impossible");
function getcachefile($file,$key)
{
global $memcache;
if($get_result = memcache_get($memcache,$key))
{
return $get_result;
}
else
{
// mise en cache si il ne l'ai pas, normal
$arr= file_get_contents($file);
memcache_set( $memcache, $key, $arr , false, 100);
return $arr;
}
}
echo getcachefile('../template.html','template');
echo getcachefile('../templates/forum.html','forum');
echo getcachefile('../templates/message.html','message');
echo getcachefile('../templates/courrierecrire.html','courrierecrire');
?>Script 2 :
<?
// testmemcache
function getcachefile($file,$key)
{
$arr= file_get_contents($file);
return $arr;
}
echo getcachefile('../template.html','template');
echo getcachefile('../templates/forum.html','forum');
echo getcachefile('../templates/message.html','message');
echo getcachefile('../templates/courrierecrire.html','courrierecrire');
?>Et la les résultats sont plus que peu concluant :
script 1 :
Percentage of the requests served within a certain time (ms)
50% 3
66% 4
75% 4
80% 4
90% 4
95% 5
98% 8
99% 13
100% 58 (longest request)
Requests per second: 221.92 [#/sec] (mean)
script 2 :
Percentage of the requests served within a certain time (ms)
50% 2
66% 2
75% 3
80% 3
90% 3
95% 3
98% 4
99% 6
100% 11 (longest request)
Requests per second: 319.03 [#/sec] (mean)
Bref vous l'aurez compris , le file_get_contents est plus rapide que l'acces a la mémoire ( sur dedibox biensur )
Je me dis "non c pas possible" et je test alors la fonction de mise en cache de eaccelerator :
function getcachefile($file,$key)
{
if($get_result = eaccelerator_get($key))
{
return $get_result;
}
else
{
$arr= file_get_contents($file);
eaccelerator_put($key, $arr ,100);
return $arr;
}
}
Résultats : A peine mieux
Percentage of the requests served within a certain time (ms)
50% 2
66% 2
75% 2
80% 2
90% 2
95% 2
98% 4
99% 15
100% 190 (longest request)
Requests per second: 316.64 [#/sec] (mean)
Du coup je reteste mon script 1 avec pconnect (connexion persistante) :
et la on peut dire que c'est mieux:
Percentage of the requests served within a certain time (ms)
50% 1
66% 1
75% 1
80% 2
90% 3
95% 4
98% 5
99% 8
100% 26 (longest request)
Requests per second: 416.27 [#/sec] (mean)
Mise en application sur le site
La je me dis "Youhou , de 320 req / sec a 420red /sec, c'est tout bon , 30% de puissance de gagner
Sur un script normal on gagnera bien quelque 10%
Et bien une fois en ligne sur le site , ca n'ai pas comme ca que ca se passe
J'ai mis des fonctions de mise en cache des fichiers avec un parametre filemtime($file); pour être sur d'avoir la bonne version en cache
Le site a été fortement ralenti avec ce petit filemtime qui pourtant semble annodin
Mon site passe alors de 89 req/secondes à 56 req / secondes...GRRR
Résultat des courses, des heures perdues ... mais instructives
Donc en conclusion,
Memcache semble rester intéressant mais il faut vraiment tester les performances et pas l'utiliser à tort et à travers ,et surtout savoir a quoi on veut l'utiliser , il peut je pense etre très intéressant pour les sites qui conservent la totalité du résultat d'une page en cache ( site sans connexion ) et qui ne sont pas mis à jour souvent
Dans mon cas, mise en cache de fichiers, cela devient presque lourdingue si l'on veux changer ses fichiers régulierement , et donc dans mon cas , ca ne sera pas utile ou alors il faudrait coder une petite page qui vide le cache de memcache (memcache_flush)
Si vous souhaitez gagner du temps en chargement de fichiers (template par exemple), n'hésitez pas à mettre memcache sur votre serveur, mais faites vous un petit fichier de vidage du cache avec memcache_flush ou une série de memcache_delete et roulez jeunesse !!
Ce qu'il faut retenir de ce test :
(ben oui si vous aviez su vous seriez directement descendu a cette ligne hihi
)
Memcache : oui , avec pconnect , et une fonction de vidage pour affecter le site dans l'instant
Voila , j'espere que ce petit test sans images ( mode : début de l'internet
) vous aura malgré tout plu et informé
Ps: Installer eaccelerator pour qu'il gere les versions précompilés de vos scripts n'est pas négligeable également , mais pour en connaitre son interet,il y a des benchmark disponibles un peu partout sur le web ![]()
Ps² : A noter que l'on peut utiliser memcache comme gestionnaire de sessions, également très intéressant
Dernière modification par Jérémy (2008-01-26 10:51:56)
Hors ligne
Ces systèmes de cache ne sont-il pas plutôt fait pour du contenu généré par des cgi style php à partir d'une base de donnée plutôt que des fichiers HTML statiques ?
Parceque bon, les fichiers que tu rends sont également en mémoire, la couche du système de fichier dans le système d'exploitation s'en charge très bien, probablement mieux que n'importe quel accélérateur.
Hors ligne
Avec un memcache_pconnect , le test prouve que c'est encore plus intéressant
Mais en effet , c'est beaucoup plus utile pour les résultats de requettes
Mais personnelement je suis déja sur un cache requettes dans des fichiers donc mon test se basait principalement sur la différence entre les deux systemes de cache (cache fichier vs cache mémoire)
Surtout que si le cache Systeme etait plus intéressant, mon cache fichier serait plus intéressant et plus simple à gérer en prime, mais ca n'est pas le cas, mais je refait bientot totalement mon site azote.org , j'en profiterais pour faire des tests étapes par étapes sur la mise en place de memcache
Hors ligne
As-tu essayé APC ? Outre mettre automatiquement l'opcode de tes pages php en cache memoire, il y a aussi des fonctions pour mettre ce que tu veux en mémoire ![]()
De plus, facebook à développé dans son coin une jolie version de l'extension APC qui dump la mémoire APC et permet de la ré-injecté dans un autre système, bien pratique des fois ![]()
Hors ligne
J'ai testé eaccelerator, similaire a apc , en plus performant
Apres avec un module redeveloppé il peut etre plus intéressant, et bien developper on peut gérer un listing des variables et de l'export / import facilement
Hors ligne