Sans opcache, PHP lit et compile chaque fichier à chaque requête - le même travail, des milliers de fois par minute, pour des fichiers qui n'ont pas changé. opcache garde la forme compilée en mémoire. C'est en général la plus grande amélioration disponible à elle seule, et c'est un réglage.
opcache.enable=1
opcache.memory_consumption=192
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=2
Vérifier qu'il est vraiment actif
php -i | grep -E 'opcache.enable|opcache.memory'
# or, in a page you can reach:
print_r(opcache_get_status()['opcache_statistics']);
- opcache_hit_rate sous 95 % - memory_consumption est trop petit et il expulse des fichiers dont il aura de nouveau besoin.
- num_cached_keys proche de max_accelerated_files - relevez la limite de fichiers ; un grand framework en a plus que ce que la valeur par défaut autorise.
Ce qu'il ne fait PAS
Il met en cache du code compilé, pas des résultats. Une requête lente est exactement aussi lente avec opcache actif. Si votre page est lente à cause de ce qu'elle demande à la base, cela ne change rien - et c'est la déception la plus fréquente.
Le réglage qui cache un déploiement
opcache.validate_timestamps=0 est plus rapide et signifie que PHP ne vérifie jamais si un fichier a changé. Votre déploiement part et le site continue de servir l'ancien code, sans erreur nulle part. Si vous le mettez, votre déploiement DOIT vider le cache.# after deploying, with validate_timestamps=0
cachetool opcache:reset
# or reload the pool
systemctl reload php8.3-fpm
Sur l'hébergement EGPHP, opcache est actif et réglé pour le pool. Cette page vise un VPS que vous gérez vous-même.