Boostez les performances PHP avec APC
Dans la jungle des techniques d’optimisation d’un serveur web, si vous avez une application ou un site/blog en PHP5, il existe une solution relativement simple à mettre en place : APC (pour Alternative PHP Cache).
Disponible sous forme de package PECL (PHP Extension Community Library), APC fait parti de ce que l’on nomme les « accélérateurs PHP ». Il en existe plusieurs autres :
- eAccelerator,
- XCache,
- Turk MMCache (plus maintenu),
- etc.
J’ai choisi APC pour sa facilité d’installation, mais également pour sa future intégration dans PHP 5.4 (puisque la version 6 est annulée jusqu’à nouvel ordre).
Son fonctionnement est simple : APC est un cache d’OPCode. Le code qui est lisible par un humain doit être transformé en code lisible par une machine : dans le cas de PHP, ceci est fait à la volée, pour chaque exécution de fichier. APC intercepte la phase de compilation du code, et la remplace par du code déjà généré précédemment, qui avait été mis en mémoire. On économise ainsi une étape, et donc du traitement.
Cette technique est surtout utile avec l’utilisation de frameworks : en effet, le contenu des fichiers ne change pas en phase de production, la version en mémoire est donc toujours la bonne.
Avant de l’installer, je fais un benchmark avec ApacheBench, ce qui me permettra de faire une comparaison une fois le cache activé.
Note : le test a été réalisé en local sur la page d’accueil d’un blog WordPress. Apache peut fournir ici 111 requêtes par serconde.
Installation d’APC
La dernière version stable au moment où j’écris cet article est la 3.1.6. Pour commencer, il faut installer les paquets « php-pear » et « php-devel » car PECL en a besoin. Une fois installés, il suffit d’y aller gaiement avec la commande « pecl install apc ».
Note : il se peut que l’installation pose une ou deux questions. Si vous ne savez pas, laissez les valeurs par défaut.
Configuration
Il reste à activer APC pour qu’il soit chargé au lancement d’Apache. Il est possible d’ajouter la ligne suivante dans le php.ini :
extension=apc.so
Pour ma part, j’ai l’habitude de dissocier chaque fonction : j’utilise un fichier apc.ini qui charge APC, et qui contient les paramètres de configuration. Il se trouve dans /etc/php.d/
extension=apc.so
apc.shm_segments= »1″
apc.shm_size= »128″
apc.stat= »0″
apc.filters= »wp-admin »
La première ligne permet de charger l’extension, puis je déclare un segment de 128 Mo de cache. Le paramètre apc.stat positionné sur false indique qu’il ne faut pas vérifier si le code PHP a changé. Si vous êtes en phase de maquette/pré-production, vous pouvez le mettre sur 1, de telle façon qu’APC ira chercher quels fichiers sont modifiés depuis la dernière exécution.
Enfin, apc.filters me permet d’exclure le répertoire wp-admin de mon blog pour la mise en cache. Les paramètres seront pris en compte au prochain redémarrage d’Apache.
C’est le moment de refaire un benchmark pour voir le résultat :
Ici, on peut noter une différence relativement importante : 6 fois plus de requêtes simultanées possibles sur le même serveur. Ne vous réjouissez pas trop vite, cela dépend de pas mal de facteurs !
Interface d’administration
Il existe une interface web toute prête qui vous permettra de consulter les statistiques d’utilisation de votre/vos instance(s) APC. Il faut copier le fichier /usr/share/pear/apc.php dans un répertoire qui est publié par le serveur web. Voici le résultat :
Si vous voulez protéger l’accès à cette interface, il suffit d’éditer le fichier apc.php, et d’y modifier les identifiants par défaut :
A noter qu’il est tout à fait possible d’associer APC et Memcached sur le même serveur : les deux systèmes sont totalement différents et n’assurent pas les mêmes fonctionnalités.
La documentation du paramétrage d’APC se trouve sur la page : Runtime Configuration.
Ping by Revue du web du 13/04/2011 « www.aurelienpiat.com — 15 avril 2011 @ 11:14
[...] Boostez les performances PHP avec APC, Via wOueb by Romain DECKER / Another IT Guy Blog [...]
Commentaire by IBuzzyou — 5 mai 2011 @ 15:11
Très bon article, par contre, je rencontre un problème je n’arrive pas à empêcher APC de marcher sur certaines sections de mon site admin et includes, pourriez vous m’aider ?
Commentaire by Romain — 5 mai 2011 @ 17:48
Il faut utiliser la variable « apc.filters » dans le fichier de configuration apc.ini
Et pour valider les modifications, il faut relancer le serveur web.
Commentaire by IBuzzyou — 6 mai 2011 @ 16:33
Merci beaucoup, je pense avoir réussi, j’ai du mettre apc.filters dans le fichier php.ini
Ping by Test de montée en charge d’un site web ou d’une API avec Blitz.io « wOueb by Romain DECKER / Another IT Guy Blog — 7 septembre 2011 @ 13:47
[...] les workers se libèrent).Maintenant, pour un second test, je réactive tout ce qu’il faut :APC pour booster les performances d’Apache,Memcached pour la mise en cache d’objets,Varnish en reverse-proxy / solution de cache.Et [...]
Ping by Test de montée en charge d’un site web ou d’une API avec Blitz.io « wOueb by Romain DECKER / Another IT Guy Blog — 7 septembre 2011 @ 13:47
[...] les workers se libèrent).Maintenant, pour un second test, je réactive tout ce qu’il faut :APC pour booster les performances d’Apache,Memcached pour la mise en cache d’objets,Varnish en reverse-proxy / solution de cache.Et [...]
Commentaire by Djib's — 13 octobre 2012 @ 21:20
Salut,
Pourquoi exclure wp-admin du cache ?
Commentaire by Romain — 15 octobre 2012 @ 17:24
Salut,
1. si tu mets à jour WordPress, tu vas avoir des soucis : le cache contiendra une partie de l’ancienne version.
2. parce qu’il n’a pas besoin d’être en cache
Commentaire by Djib's — 19 octobre 2012 @ 9:32
Merci pour l’information.
J’ai une autre question, est-ce normal que le cache de APC se vide tous les soirs à OO:11 (uptime) ?
Je veux dire, est-ce qu’il y a un réglage par défaut qui vide le cache toutes les 24h?
Ping by Tutoriel : Serveur dédié web - Fotozik — 15 août 2013 @ 16:57
[…] APC http://gregrickaby.com/the-per.....iguration/ http://www.woueb.net/2011/04/1.....r-php-apc/ […]