Optimiser PHP avec Zend Opcache
Zend Opcache (ex Zend Optimizer+) est un accélérateur PHP et il fonctionne plutôt bien. Comment ? Il faut savoir que les scripts PHP doivent être compilés en PHP bytecode à chaque exécution, et on constate pour cette raison des temps de réponse de l’ordre de 500ms sur un back-end PHP faisant tourner un WordPress. Zend Opcache stocke et optimise ce code compilé pour une ré-utilisation ultérieure. Et il est plutôt performant.
Zend Opcache est compatible avec PHP depuis la version 5.2 et y est même intégré depuis la 5.5. Malheureusement il n’est pas disponible sur Debian (Wheezy en 7.5) à l’heure actuelle. Alors comment faire ?
Utiliser DotDeb et migrer vers PHP 5.5
DotDeb est un repository qui fournit les dernières versions up-to-date et patchs de sécurité pour transformer son debian en serveur LEMP. Il inclut notamment une version 5.5.x de PHP pour Wheezy. L’avantage est de disposer de mises à jour automatisées, par contre il faut s’assurer que ses applications sont bien compatibles avec PHP 5.5 et ne requièrent pas php5-xcache.
Il faut dans un premier temps rajouter DotDeb aux sources de son serveur, et pour cela créer le fichier /etc/apt/sources.list.d/dotdeb.list
1 2 3 4 5 6 7 8 | root@server:~# cat /etc/apt/sources.list.d/dotdeb.list # Dot deb Repository. See www.dotdeb.org deb http://packages.dotdeb.org wheezy all deb-src http://packages.dotdeb.org wheezy all # Dot deb Repository for PHP 5.5.x deb http://packages.dotdeb.org wheezy-php55 all deb-src http://packages.dotdeb.org wheezy-php55 all |
Ensuite, il ne reste plus qu’à permettre l’authentification des nouveaux repositories et mettre à jour le système
1 2 3 | root@server:~# wget http://www.dotdeb.org/dotdeb.gpg root@server:~# apt-key add dotdeb.gpg root@server:~# apt-get update && apt-get dist-upgrade |
Zend Opcache est présent dans le package php5-common
et sera activé par défaut.
Compiler Zend Opcache avec php-pear
Si passer à PHP 5.5 pose des problèmes de compatibilité, il est aussi possible de compiler Zend Opcache avec PECL dans un environnement PHP 5.2, 5.3 et 5.4.
1 2 | root@server:~# apt-get install php-pear root@server:~# apt-get install build-essential php5-dev |
Et on compile !
1 2 3 4 5 6 7 8 9 10 | root@server:~# pecl install zendopcache Failed to download pecl/zendopcache within preferred state "stable", latest release is version 7.0.3, stability "beta", use "channel://pecl.php.net/zendopcache-7.0.3" to install install failed root@server:~# pecl install channel://pecl.php.net/zendopcache-7.0.3 [...] Build process completed successfully Installing '/usr/lib/php5/20100525/opcache.so' install ok: channel://pecl.php.net/zendopcache-7.0.3 configuration option "php_ini" is not set to php.ini location You should add "zend_extension=opcache.so" to php.ini |
Pecl précise (à la ligne 7) où il vient de placer Zend Opcache. Avec cette information, on peut maintenant créer la configuration principale dans le fichier /etc/php5/mods-available/opcache.ini
et mettre en place les liens symboliques. Plus d’information sur les options de configuration est disponible sur le site php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | root@server:~# cat /etc/php5/mods-available/opcache.ini ; chemin vers opcache.so selon le resultat de pecl zend_extension=/usr/lib/php5/20100525/opcache.so ; en fonction de son systeme opcache.memory_consumption=64 opcache.max_accelerated_files=4000 opcache.interned_strings_buffer=8 opcache.fast_shutdown=1 ; pour debuguer ; a commenter sur son serveur de production ; opcache.revalidate_freq=0 : opcache.consistency_checks=1 ; opcache.enable_cli=1 root@server:~# ln -s /etc/php5/mods-available/opcache.ini /etc/php5/conf.d/05-opcache.ini root@server:~# ls -alh /etc/php5/fpm/conf.d/05-opcache.ini lrwxrwxrwx 1 root root 36 mai 20 19:26 /etc/php5/fpm/conf.d/05-opcache.ini -> /etc/php5/mods-available/opcache.ini |
Il ne reste plus qu’à relancer les services. Si vous utilisez apache : service apache2 restart
. On vérifie aussi la bonne installation de Zend Opcache avec un simple php5-fpm -v
1 2 3 4 5 6 7 | root@server:~# service php5-fpm restart [ ok ] Restarting PHP5 FastCGI Process Manager: php5-fpm. root@vps62429:~# php5-fpm -v PHP 5.4.4-14+deb7u9 (fpm-fcgi) (built: Apr 18 2014 14:36:29) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies |
On peut nettoyer son système des packages nécessaires à la compilation avec un apt-get purge build-essential php5-dev
.
Pour conclure
Ce n’est que subjectif n’ayant pas mesuré, mais j’ai ressenti une réelle différence par rapport à APC. Je ne peux donc que recommander Zend Opcache d’autant plus qu’il devient maintenant la solution officielle d’opcache de PHP.