Améliorer les performances de votre application PHP avec Zend Opcache

Zend OPcache

Zend OpCache cache et optimise l’opcode (version pré-compilée d’un script) afin de fournir une exécution plus rapide des scripts PHP. Il améliore les performances de PHP car ce dernier n’a plus besoin de charger, d’analyser et de pré-compiler les scripts.

En fonction de la version de PHP sa mise en place est différente.

Php 5.5 et +

PHP 5.5 intégre déjà ZendOpCache, mais ce dernier n’est pas activé. Il faut donc dé-commenter la ligne suivant dans votre /etc/php5/apache2/php.ini et changer sa valeur à 1 .

opcache.enable=1

Php 5.4

Cette extension PECL n’est pas intégrée à PHP, il vous faut suivre les étapes ci dessous pour l’installer.
L’installation a été faite pour ma part sur une debian wheezy.

Installation

Pour commencer regarder quelle est la dernier version stable à installer ici. Actuellement il s’agit de la 7.0.5

# Install "pecl" via php-pear
$ sudo apt-get install -y php-pear

# Install build dependencies
$ sudo apt-get install -y build-essential php5-dev

# Install Zend OpCache
$ sudo pecl install zendopcache-7.0.5

Configuration

Une fois l’installation finie, les dernières lignes affichées vous permettent de localiser le fichier opcache.so

Build process completed successfully
Installing '/usr/lib/php5/20100525/opcache.so'
install ok: channel://pecl.php.net/zendopcache-7.0.5
configuration option "php_ini" is not set to php.ini location
You should add "zend_extension=/usr/lib/php5/20100525/opcache.so" to php.ini

sinon vous pouvez toujours le chercher :

sudo find / -name 'opcache.so'
	/usr/lib/php5/20100525/opcache.so

La convention d’installation d’un module php, indique qu’il faut mettre tous les fichiers dans /etc/php5/conf.d qui sont des liens symboliques de /etc/php5/mods-available
Pour ma part, je préfère créer directement le fichier dans /etc/php5/conf.d sans m’incommoder de liens symboliques.

Vous devez donc créer le fichier opcache.ini (à l’emplacement de votre choix) et y insérer le lien vers le fichier opcache.so ainsi que la configuration suivante généralement recommandée, vu qu’elle fournit un bon gain en terme de performance :

zend_extension=/usr/lib/php5/20100525/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

Si vous avez créée votre fichier dans /etc/php5/mods-available n’oubliez pas le lien symbolique.

sudo ln -s /etc/php5/mods-available/opcache.ini 20-opcache.ini

Redémarrer Apache

sudo service apache2 restart

Redémarrer Nginx

sudo service php5-fpm restart
sudo service nginx restart

Confirmation d’installation

Afin de confirmer la réussite de l’installation, lancer php -v pour obtenir des informations concernant Zend OpCache.

php -v
	PHP 5.4.45-0+deb7u2 (cli) (built: Oct 17 2015 08:26:31)
	Copyright (c) 1997-2014 The PHP Group
	Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
		with Zend OPcache v7.0.5, Copyright (c) 1999-2015, by Zend Technologies

Cleanup

En production il est conseillé de ne pas conserver les packages précédemment installés

sudo apt-get remove --purge build-essential php5-dev

Performances

Sur mon wordpress je suis passé d’un temps de chargement des pages de 1,50sec à 742ms, sans utiliser d’extension de cache.