Booster ses applications PHP avec le cache APC PDF Imprimer Envoyer
Écrit par Wtc0der   
Vendredi, 24 Avril 2009 00:00

Introduction

PHP est un langage interprété, c'est à dire qu'il est converti en instructions exécutables à chaque appel. C'est une sorte de compilation à la volée.

Cette dernière nécessite donc un effort plus ou moins important de la part du serveur à chaque fois qu'une page dynamique lui est demandé.

L'APC pour "Alternative PHP Cache" est une extension libre et gratuite qui permet de mettre en cache une version précompiler du code PHP (aussi appelé opcode).

Le gain de performance peut donc être considérable, d'autant plus que ce cache est stocké dans la mémoire vive de la machine.
C'est ce que nous allons voir dans cet article à travers une première (et rapide) étape d'installation suivi d'une phase de test avec et sans le cache APC.

C'est aussi une manière d'introduire mon prochain article sur l'utilisation du Zend_Cache et de l'APC pour booster nos application Zend Framework ;)

Installation

D'autres sites plus spécialisé traitant déjà très largement ce domaine, je ne vais pas m'étendre, simplement expliquer comment je m'y suis pris sur ce serveur (Debian 5.0).

Tout d'abord, il faut installer les paquets pré-requis suivant : php5-dev php-pear apache2-prefork-dev :

apt-get install php5-dev php-pear apache2-prefork-dev

Puis lancer l'installation de l'extension elle même :

pecl install apc

A présent, il faut configurer Php pour qu'il charge l'extension :

vim /etc/php5/apache2/conf.d/apc.ini
...
# Chargement de l'extention
extension=apc.so

# Taille de RAM allouée au cache APC
apc.shm_size=64

Pour finir, nous allons copier le programme de suivi du cache dans notre dossier web et redémarrer Apache :

cp /usr/share/php/apc.php /var/www/
/etc/init.d/apache2 restart

Si tout c'est bien passé, vous devriez pouvoir vous rendre sur le fichier apc.php à la racine de votre serveur web et observer ceci :

Le cache APC en action

Premiers tests PHP

Nous allons à présent tester l'efficacité de ce cache d'opcode sur une application PHP telle que... Wordpress :)

Je vais me servir pour cela de l'outil Neoload de Neotys.

Pour faire simple, Neoload est un simulateur de charge qui permet de tester avec précision les réactions d'un serveur selon un scénario de navigation pré enregistré appliqué à un certain nombre d'utilisateurs durant un temps limité.

Pour notre test, je vais simuler une activité constante de 10 utilisateurs simultanés pendant 1 minute sur l'ouverture de 3 articles de ce blog.

Une première fois sans le cache APC et une deuxième fois avec :

Synthèse des Résultats


A B
Projet: TestAPC TestAPC
Description: 1 minute / 10 utilisateurs simultanés / avec APC 1 minute / 10 utilisateurs simultanés / sans APC
Scénario: scenario1 scenario1
Date de début: 24 avr. 2009 07:47:54 24 avr. 2009 07:49:58
Date de fin: 24 avr. 2009 07:48:57 24 avr. 2009 07:51:04
Durée: 00:01:02 00:01:06
Variation de charge - La population Population1 est constante avec 10
utilisateurs .
- La population Population1 est constante avec 10 utilisateurs .
Injecteurs: localhost localhost

Temps de réponses avec et sans APC

Synthèse des Statistiques


A B %
Pages/s moyen 2 1 -50%
Hits/s moyen 6 4 -33,3%
Temps de réponse moyen de requête 0,992s 1,63s +64,3%
Temps de réponse moyen de page 2,22s 3,36s +51,4%
Débit moyen 24.0 ko/s 16.0 ko/s -33,3%
Nb Pages total 153 112 -26,8%
Nb Hits total 377 278 -26,3%
Nb Erreurs total 0 0 +0%
Débit total 1.51 Mo 1.04 Mo -31,1%
Nb Utilisateurs total 20 10 -50%


Télécharger le rapport comparatif complet avec et sans cache APC

Comme vous pouvez le voir, sur une application web comme WordPress, le gain est loin d'être négligeable.
Un petit tour sur notre page de suivi du cache (apc.php) nous indique clairement l'utilité de ce dernier : 18Mo de code précompilé mis en mémoire, et 96% de hits cachés !

Résultat du test

Pour conclure

Les bases sont à présent posées et vont nous permettre de voir dans un prochain article comment tirer profit de cette extension, et plus généralement des différents systèmes de cache dans un environnement Zend Framework.

Mise à jour le Mardi, 17 Novembre 2009 23:10
 

Ajouter un Commentaire


Code de sécurité
Rafraîchir