PHP 5.5 a été publié et il comporte un nouveau module de mise en cache de code appelé OPCache, mais il ne semble pas y avoir de documentation pour cela.
Alors, où est la documentation et comment utiliser OPcache?
PHP 5.5 a été publié et il comporte un nouveau module de mise en cache de code appelé OPCache, mais il ne semble pas y avoir de documentation pour cela.
Alors, où est la documentation et comment utiliser OPcache?
Réponses:
OpCache est compilé par défaut sur PHP5.5 +. Cependant, il est désactivé par défaut. Pour commencer à utiliser OpCache en PHP5.5 +, vous devez d'abord l'activer. Pour ce faire, vous devez procéder comme suit.
Ajoutez la ligne suivante à votre php.ini
:
zend_extension=/full/path/to/opcache.so (nix)
zend_extension=C:\path\to\php_opcache.dll (win)
Notez que lorsque le chemin contient des espaces, vous devez le mettre entre guillemets:
zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"
Notez également que vous devrez utiliser la zend_extension
directive au lieu de la directive "normale" extension
car elle affecte le moteur Zend réel (c'est-à-dire la chose qui exécute PHP).
Actuellement, il existe quatre fonctions que vous pouvez utiliser:
opcache_get_configuration()
:Renvoie un tableau contenant la configuration actuellement utilisée par OpCache. Cela inclut tous les paramètres ini ainsi que les informations de version et les fichiers sur liste noire.
var_dump(opcache_get_configuration());
opcache_get_status()
:Cela renverra un tableau contenant des informations sur l'état actuel du cache. Ces informations comprendront des éléments tels que: l'état du cache (activé, redémarrage, plein, etc.), l'utilisation de la mémoire, les hits, les échecs et quelques informations plus utiles. Il contiendra également les scripts mis en cache.
var_dump(opcache_get_status());
opcache_reset()
:Réinitialise l'intégralité du cache. Cela signifie que tous les scripts en cache possibles seront à nouveau analysés lors de la prochaine visite.
opcache_reset();
opcache_invalidate()
:Invalide un script mis en cache spécifique. Cela signifie que le script sera à nouveau analysé lors de la prochaine visite.
opcache_invalidate('/path/to/script/to/invalidate.php', true);
Certaines interfaces graphiques ont été créées pour aider à maintenir OpCache et générer des rapports utiles. Ces outils exploitent les fonctions ci-dessus.
OpCacheGUI
Disclaimer Je suis l'auteur de ce projet
Fonctionnalités:
Captures d'écran:
URL: https://github.com/PeeHaa/OpCacheGUI
opcache-status
Fonctionnalités:
Capture d'écran:
URL: https://github.com/rlerdorf/opcache-status
opcache-gui
Fonctionnalités:
Capture d'écran:
Comme OPcache est conçu pour remplacer le module APC, il n'est pas possible de les exécuter en parallèle en PHP. C'est très bien pour mettre en cache l'opcode PHP car ni l'un ni l'autre n'affecte la façon dont vous écrivez le code.
Cependant, cela signifie que si vous utilisez actuellement APC pour stocker d'autres données (via la apc_store()
fonction), vous ne pourrez pas le faire si vous décidez d'utiliser OPCache.
Vous devrez utiliser une autre bibliothèque telle que APCu ou Yac qui stockent les données dans la mémoire PHP partagée, ou passer à quelque chose comme memcached, qui stocke les données en mémoire dans un processus distinct pour PHP.
De plus, OPcache n'a pas d'équivalent du compteur de progression de téléchargement présent dans APC. Au lieu de cela, vous devez utiliser la progression du téléchargement de session .
La documentation pour OPcache peut être trouvée ici avec toutes les options de configuration répertoriées ici . Les paramètres recommandés sont:
; Sets how much memory to use
opcache.memory_consumption=128
;Sets how much memory should be used by OPcache for storing internal strings
;(e.g. classnames and the files they are contained in)
opcache.interned_strings_buffer=8
; The maximum number of files OPcache will cache
opcache.max_accelerated_files=4000
;How often (in seconds) to check file timestamps for changes to the shared
;memory storage allocation.
opcache.revalidate_freq=60
;If enabled, a fast shutdown sequence is used for the accelerated code
;The fast shutdown sequence doesn't free each allocated block, but lets
;the Zend Engine Memory Manager do the work.
opcache.fast_shutdown=1
;Enables the OPcache for the CLI version of PHP.
opcache.enable_cli=1
Si vous utilisez une bibliothèque ou un code qui utilise des annotations de code, vous devez activer les commentaires d'enregistrement:
opcache.save_comments=1
S'il est désactivé, tous les commentaires PHPDoc sont supprimés du code pour réduire la taille du code optimisé. La désactivation des "commentaires de doc" peut casser certaines applications et frameworks existants (par exemple Doctrine, ZF2, PHPUnit)
Je vais déposer mes deux cents pour ce que j'utilise opcache.
J'ai créé un cadre complet avec beaucoup de champs et de méthodes de validation et d'énumérations pour pouvoir parler à ma base de données.
Sans opcache
Lorsque j'utilise ce script sans opcache et que je pousse 9000 requêtes en 2,8 secondes vers le serveur apache, il atteint un maximum de 90-100% cpu pendant 70-80 secondes jusqu'à ce qu'il rattrape toutes les requêtes.
Total time taken: 76085 milliseconds(76 seconds)
Avec opcache activé
Avec opcache activé, il fonctionne à un temps de 25-30% cpu pendant environ 25 secondes et ne dépasse jamais l'utilisation de 25% cpu.
Total time taken: 26490 milliseconds(26 seconds)
J'ai créé un fichier de liste noire opcache pour désactiver la mise en cache de tout sauf le cadre qui est tout statique et n'a pas besoin de changer de fonctionnalité. Je choisis explicitement uniquement les fichiers de framework afin de pouvoir développer sans me soucier de recharger / valider les fichiers cache. Tout avoir mis en cache permet d'économiser une seconde sur le total des demandes25546 milliseconds
Cela augmente considérablement la quantité de données / demandes que je peux gérer par seconde sans même que le serveur sue.
zend_extension=php_opcache.dll; 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; opcache.blacklist_filename="C:\xampp\php\cfg\opcache.blacklist;
Remplacez simplement le; avec une entrée dans le fichier ini. Mais c'est ce que j'ai utilisé. surtout des trucs par défaut
opcache.revalidate_freq=60;
détermine la durée de vie d'un fichier en mémoire en secondes. lorsque le temps est écoulé, il recompile le fichier.
opcache.revalidate_freq
contrôle la fréquence de vérification des modifications d'un script (selon que son horodatage a changé). Donc, si l'horodatage d'un script reste le même que la dernière fois qu'il a été compilé, il ne sera pas recompilé. Tout cela suppose que vous n'avez pas modifié le opcache.validate_timestamps
paramètre, qui est activé par défaut.
Avec PHP 5.6 sur Amazon Linux (devrait être le même sur RedHat ou CentOS):
yum install php56-opcache
puis redémarrez apache.
Je l'ai rencontré lors de la configuration de Moodle. J'ai ajouté les lignes suivantes dans le fichier php.ini.
zend_extension=C:\xampp\php\ext\php_opcache.dll
[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
; Required for Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0
; If something does not work in Moodle
;opcache.revalidate_path = 1 ; May fix problems with include paths
;opcache.mmap_base = 0x20000000 ; (Windows only) fix OPcache crashes with event id 487
; Experimental for Moodle 2.6 and later
;opcache.fast_shutdown = 1
;opcache.enable_cli = 1 ; Speeds up CLI cron
;opcache.load_comments = 0 ; May lower memory use, might not be compatible with add-ons and other apps
extension=C:\xampp\php\ext\php_intl.dll
[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING
opcache.fast_shutdown = 0
github.com/zendtech/ZendOptimizerPlus/issues/146