Configurer OpCache dans Docker

Image utilisateur

Comme annoncé dans un précédant article, j'ai récemment migré mon site web vers une infrastructure Docker.

J'ai donc utilisé un conteneur PHP tout simple, mais plutôt que de partir d'un conteneur standard Ubuntu ou Debian et d'y installer PHP via les dépôts, j'ai préféré utiliser le conteneur officiel PHP proposé par Docker. Je l'ai préféré à une solution standard, car il propose plusieurs versions de PHP (5.4, 5.5 et 5.6) et qu'il est très facile d'y installer diverses extensions. 

Après une semaine, les résultats étaient plutôt positif, mais lors d'une vérification avec un simple phpinfo, je me suis rendu compte que par défaut, le cache opcode pourtant activé par défaut depuis php5.5 ne l'était pas. Bref, les performances étaient quand même pas génial, avec une moyenne de 15 requêtes traités par seconde.

 

J'ai donc fait des recherches pour voir comment remédier à ça et obtenir une configuration optimale pour un conteneur Docker où le code PHP exécuté n'est pas censé être changé sauf si le conteneur est relancé, j'ai donc opté pour la configuration suivante :

; Configuration opCache
; La librairie est présente par défaut mais pas chargée zend_extension=opcache.so
; Activation de l'opCache opcache.enable="1"
; Augmentation de la taille de la mémoire du cache de 64 à 256Mo opcache.memory_consumption="256"
; Désactive l'ajout du nom du dossier pour le cache, augmente les performances, mais risque de rendre l'application inutilisable, dans mon cas ça n'a pas eu d'effet négatif. opcache.use_cwd="0"
; Le cache a une durée de vie infini, seul un vidage manuel du cache (par le redémarrage du conteneur) permet de prendre en compte des modifications de code PHP (augmente énormément les performances) opcache.validate_timestamps="0"
; Accélére l'extinction d'opcache en vidant la mémoire par bloc opcache.fast_shutdown="1"
; Désactive la limite de taille pour les fichiers mis en cache opcache.max_file_size="0"

Cette configuration a eu des effets très importants sur le nombre de réponses traitées ainsi que sur le temps de chargement des pages. En ayant refait le même test de monté en charge qu'avant l'activation d'OpCache, je passe de 15 à 70 requêtes par seconde, vu que c'est simple à mettre en place ça serait dommage de s'en priver clin.png.

Il est bien entendu possible d'utiliser cette configuration pour OpCache en dehors d'un conteneur Docker, mais il faudra alors veiller à redémarrer PHP-FPM/Apache en cas de modification du code PHP de votre site/application.

L'auteur

Toshy

Passionné par l'informatique depuis mon plus jeune age, j'anime un blog sur le développement web et les différents domaines qui s'y attachent : administration système, bonne pratique de développement, framework web.
Je suis développeur web de profession, diplômé d'un DUT d'informatique, je travaille actuellement au sein du service informatique d'une université.