web-dev-qa-db-fra.com

Comment utiliser PHP OPCache?

PHP 5.5 a été publié et propose un nouveau module de cache de code appelé OPCache, mais il ne semble pas y avoir de documentation à ce sujet.

Où se trouve la documentation et comment utiliser OPcache?

240
Danack

Installation

OpCache est compilé par défaut sur PHP 5.5 +. Cependant, il est désactivé par défaut. Pour commencer à utiliser OpCache dans PHP 5.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 directive zend_extension à la place de la directive "normale" extension car elle affecte le moteur Zend (c'est-à-dire la chose qui exécute PHP).

Usage

Il existe actuellement quatre fonctions que vous pouvez utiliser:

opcache_get_configuration() :

Retourne 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 en 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, complet, etc.), l'utilisation de la mémoire, les occurrences, les occurrences et certaines informations plus utiles. Il contiendra également les scripts mis en cache.

var_dump(opcache_get_status());

opcache_reset() :

Réinitialise le cache entier. Cela signifie que tous les scripts en cache possibles seront analysés à nouveau lors de la prochaine visite.

opcache_reset();

opcache_invalidate() :

Invalide un script en cache spécifique. Cela signifie que le script sera analysé à nouveau lors de la prochaine visite.

opcache_invalidate('/path/to/script/to/invalidate.php', true);

Maintenance et rapports

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

Avertissement Je suis l'auteur de ce projet

Fonctionnalités:

  • Statut OpCache
  • Configuration OpCache
  • Statistiques OpCache
  • OpCache réinitialiser
  • Vue d'ensemble des scripts en cache
  • Invalidation des scripts mis en cache
  • Multilingue
  • Prise en charge d'appareils mobiles
  • Graphiques brillants

Captures d'écran:

status

cached-scripts

graphs

mobilr

URL: https://github.com/PeeHaa/OpCacheGUI

opcache-status

Fonctionnalités:

  • Statut OpCache
  • Configuration OpCache
  • Statistiques OpCache
  • Vue d'ensemble des scripts en cache
  • Un seul fichier

Capture d'écran:

status

URL: https://github.com/rlerdorf/opcache-status

opcache-gui

Fonctionnalités:

  • Statut OpCache
  • Configuration OpCache
  • Statistiques OpCache
  • OpCache réinitialiser
  • Vue d'ensemble des scripts en cache
  • Invalidation des scripts mis en cache
  • Rafraîchissement automatique

Capture d'écran:

opcache-gui-overview

URL: https://github.com/amnuts/opcache-gui

369
PeeHaa

OPcache remplace APC

Comme OPcache est conçu pour remplacer le module APC, il n’est pas possible de les exécuter en parallèle en PHP. Cela convient très bien pour la mise en cache de l'opcode PHP, car cela n'affecte pas la façon dont vous écrivez le code.

Toutefois, cela signifie que si vous utilisez actuellement APC pour stocker d'autres données (via la fonction apc_store() ), vous ne pourrez pas le faire si vous décidez d'utiliser OPCache.

Vous devrez utiliser une autre bibliothèque, telle que APC ou Yac , qui stocke les données dans la mémoire partagée PHP, ou vous permet d'utiliser un autre élément tel que memcached, qui stocke les données en mémoire dans un processus distinct de PHP.

En outre, OPcache n'a pas d'équivalent du compteur de progression du téléchargement présent dans APC. Au lieu de cela, vous devez utiliser le Progression du téléchargement de la session .

Paramètres pour OPcache

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 les suivants:

; 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 utilisant des annotations de code, vous devez activer l'enregistrement des commentaires:

opcache.save_comments=1

Si cette option est désactivée, tous les commentaires PHPDoc sont supprimés du code afin de réduire la taille du code optimisé. La désactivation des "commentaires de document" peut endommager certaines applications et certains frameworks existants (par exemple, Doctrine, ZF2, PHPUnit).

151
Danack

Je vais laisser tomber mes deux sous pour ce que j'utilise opcache.

J'ai créé un cadre complet avec beaucoup de champs et méthodes de validation et enums pour pouvoir parler à ma base de données.

sans opcache

Lorsque vous utilisez ce script sans opcache ni requête Push 9000 en 2,8 secondes sur le serveur Apache, le débit maximal est de 90 à 100% de l'unité centrale pendant 70 à 80 secondes, jusqu'à ce qu'il réponde à toutes les demandes.

Total time taken: 76085 milliseconds(76 seconds)

avec opcache activé

Avec opcache activé, il s'exécute à 25-30% du temps CPU pendant environ 25 secondes et ne dépasse jamais 25% d'utilisation.

Total time taken: 26490 milliseconds(26 seconds)

J'ai fait un fichier opcache de liste noire pour désactiver la mise en cache de tout sauf du framework qui est tout statique et n'a pas besoin de changer de fonctionnalité. Je choisis explicitement uniquement les fichiers de structure afin de pouvoir développer sans me soucier de recharger/valider les fichiers de cache. Le fait de tout mettre en cache enregistre une seconde sur le total des demandes 25546 milliseconds

Cela augmente considérablement la quantité de données/demandes que je peux gérer à la seconde sans que le serveur ne craque rien.

19
Tschallacka

Avec PHP 5.6 sur Amazon Linux (devrait être identique sur RedHat ou CentOS):

yum install php56-opcache

puis redémarrez Apache.

4
Roger Dueck

Je l'ai rencontré lors de la création 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

intl -> http://php.net/manual/en/book.intl.php

2
Anoop Toffy