Hébergement web

OPcache

Définition

OPcache est l’extension de PHP qui conserve en mémoire partagée le code des scripts déjà compilé (les opcodes). PHP n’a plus besoin de relire et d’analyser chaque fichier à chaque requête, ce qui accélère fortement les applications comme WordPress, composées de centaines de fichiers PHP chargés à chaque page.

OPcache, Hébergement web

PHP est un langage interprété : avant d’exécuter un fichier, il le lit, l’analyse et le traduit en instructions internes, les opcodes. Sans cache, ce travail est refait à chaque requête, pour chacun des fichiers chargés. La documentation de PHP résume le rôle d’OPcache ainsi : il stocke le bytecode précompilé des scripts en mémoire partagée, ce qui évite à PHP de charger et d’analyser les scripts à chaque requête.

Comment fonctionne OPcache

OPcache est une extension livrée avec PHP, chargée par la directive zend_extension. Lors de la première exécution d’un fichier, ses opcodes sont placés en mémoire partagée. Les requêtes suivantes les réutilisent directement, quel que soit le worker PHP-FPM qui les traite, puisque la mémoire est commune aux processus d’un même maître.

Comparatif en deux colonnes. Sans OPcache, à chaque requête : lecture des fichiers PHP sur le disque, analyse et compilation en opcodes, exécution, puis tout est oublié. Avec OPcache : opcodes déjà en mémoire partagée, exécution immédiate, vérification des dates de modification des fichiers toutes les 2 secondes par défaut.
OPcache supprime l’étape de compilation, répétée sinon à chaque requête.

Pour tenir compte des modifications, OPcache vérifie par défaut la date des fichiers toutes les deux secondes (opcache.revalidate_freq=2). Si vous désactivez cette vérification (opcache.validate_timestamps=0), un gain possible en production, les changements de fichiers ne sont plus vus tant que le cache n’est pas vidé avec opcache_reset() ou par un redémarrage de PHP.

Les réglages utiles

Valeurs par défaut documentées par PHP :

  • opcache.memory_consumption : 128 Mo de mémoire partagée ;
  • opcache.max_accelerated_files : 10 000 fichiers au maximum ;
  • opcache.interned_strings_buffer : 8 Mo pour les chaînes internées ;
  • opcache.revalidate_freq : 2 secondes.

Un WordPress avec un constructeur de pages, WooCommerce et une vingtaine d’extensions peut dépasser le nombre de fichiers ou la mémoire prévus. Au-delà, une partie des scripts n’est plus mise en cache et le gain s’érode. La fonction opcache_get_status() ou une extension de diagnostic montre le taux de remplissage.

Depuis PHP 7.4, le préchargement (opcache.preload) charge des fichiers au démarrage de PHP. Il n’est pas disponible sous Windows et demande un redémarrage pour être mis à jour : il convient mieux aux applications figées qu’à un WordPress qui se met à jour souvent.

Vidéo : « Tutoriel PHP : OPcache » (Grafikart.fr)

Pour WordPress

La documentation de WordPress recommande d’ajouter un cache d’opcodes comme OPcache pour améliorer fortement les performances de PHP. Il complète, sans les remplacer, le cache de pages et le cache objet : OPcache évite la compilation du code, le cache objet évite des requêtes à la base de données, le cache de pages évite d’exécuter PHP.

  • En mutualisé, OPcache est normalement actif ; vérifiez-le avec phpinfo() ou dans les réglages PHP de votre panneau.
  • Sur un VPS, ajustez la mémoire et le nombre de fichiers à la taille réelle de vos sites.
  • Lors d’une mise à jour de version de PHP, rechargez PHP-FPM pour repartir d’un cache propre ; c’est aussi le moment de vérifier que la branche choisie reste maintenue (voir les versions de PHP en fin de vie).

Sécurité

Sur un serveur partagé, le cache est commun aux pools d’un même maître PHP-FPM. Des directives comme opcache.validate_permission et opcache.validate_root existent pour vérifier les droits sur les fichiers en cache et éviter les collisions dans les environnements chroot. La directive opcache.restrict_api limite l’usage des fonctions d’OPcache à un chemin donné, pour éviter qu’un script quelconque vide le cache. Ces réglages complètent ceux de notre guide pour durcir PHP.

Erreurs fréquentes

Désactiver validate_timestamps puis ne pas comprendre pourquoi une modification de fichier n’apparaît pas ; laisser la mémoire par défaut sur un gros site ; croire qu’OPcache remplace un cache de pages.

Pour aller plus loin

  • Article Versions de PHP en fin de vie : calendrier, risques et migration

Sources

  1. PHP Manual : OPcache (lien externe, nouvel onglet)
  2. PHP Manual : OPcache, runtime configuration (lien externe, nouvel onglet)
  3. PHP Manual : OPcache, installation (lien externe, nouvel onglet)
  4. WordPress Advanced Administration : Cache (lien externe, nouvel onglet)

Toutes les définitions

La sécurité WordPress, sans le bruit

Un e-mail quand ça compte : nouvelles attaques observées, mises à jour de l’extension et guides pratiques. Pas de spam, désinscription en un clic.

Commencez gratuitement, passez à Pro quand vous êtes prêt

La version gratuite masque déjà WordPress et déplace la page de connexion. Pro ajoute alias, double authentification et surveillance.