Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration d'OPcache
Nom Défaut Modifiable Historique
opcache.enable 1 INI_ALL  
opcache.enable_cli 0 INI_SYSTEM Entre PHP 7.1.2 et 7.1.6 inclusivement, la valeur par défaut était de 1
opcache.memory_consumption "128" INI_SYSTEM  
opcache.interned_strings_buffer "8" INI_SYSTEM  
opcache.max_accelerated_files "10000" INI_SYSTEM  
opcache.max_wasted_percentage "5" INI_SYSTEM  
opcache.use_cwd 1 INI_SYSTEM  
opcache.validate_timestamps 1 INI_ALL  
opcache.revalidate_freq "2" INI_ALL  
opcache.revalidate_path 0 INI_ALL  
opcache.save_comments 1 INI_SYSTEM  
opcache.fast_shutdown 0 INI_SYSTEM Supprimé en PHP 7.2.0.
opcache.enable_file_override 0 INI_SYSTEM  
opcache.optimization_level "0x7FFEBFFF" INI_SYSTEM Modifié depuis 0x7FFFBFFF en PHP 7.3.0
opcache.inherited_hack 1 INI_SYSTEM Supprimé en PHP 7.3.0
opcache.dups_fix 0 INI_ALL  
opcache.blacklist_filename "" INI_SYSTEM  
opcache.max_file_size 0 INI_SYSTEM  
opcache.consistency_checks 0 INI_ALL Désactivé à partir de PHP 8.1.18 et 8.2.5. Supprimé à partir de PHP 8.3.0.
opcache.force_restart_timeout "180" INI_SYSTEM  
opcache.error_log "" INI_SYSTEM  
opcache.log_verbosity_level 1 INI_SYSTEM  
opcache.record_warnings 0 INI_SYSTEM Disponible Ă  partir de PHP 8.0.0.
opcache.preferred_memory_model "" INI_SYSTEM  
opcache.protect_memory 0 INI_SYSTEM  
opcache.mmap_base null INI_SYSTEM  
opcache.restrict_api "" INI_SYSTEM  
opcache.file_update_protection "2" INI_ALL  
opcache.huge_code_pages 0 INI_SYSTEM  
opcache.lockfile_path "/tmp" INI_SYSTEM  
opcache.opt_debug_level 0 INI_SYSTEM Disponible Ă  partir de PHP 7.1.0
opcache.file_cache NULL INI_SYSTEM  
opcache.file_cache_only 0 INI_SYSTEM  
opcache.file_cache_consistency_checks 1 INI_SYSTEM  
opcache.file_cache_fallback 1 INI_SYSTEM Windows uniquement.
opcache.validate_permission 0 INI_SYSTEM Disponible Ă  partir de PHP 7.0.14
opcache.validate_root 0 INI_SYSTEM Disponible Ă  partir de PHP 7.0.14
opcache.preload "" INI_SYSTEM Disponible Ă  partir de PHP 7.4.0
opcache.preload_user "" INI_SYSTEM Disponible Ă  partir de PHP 7.4.0
opcache.cache_id "" INI_SYSTEM Windows uniquement. Disponible Ă  partir de PHP 7.4.0
opcache.jit "disable" INI_ALL Disponible à partir de PHP 8.0.0. Avant PHP 8.4.0, la valeur par défaut était "tracing"
opcache.jit_buffer_size 0 INI_SYSTEM Disponible Ă  partir de PHP 8.0.0
opcache.jit_debug 0 INI_ALL Disponible Ă  partir de PHP 8.0.0
opcache.jit_bisect_limit 0 INI_ALL Disponible Ă  partir de PHP 8.0.0
opcache.jit_prof_threshold "0.005" INI_ALL Disponible Ă  partir de PHP 8.0.0
opcache.jit_max_root_traces "1024" INI_SYSTEM Disponible Ă  partir de PHP 8.0.0
opcache.jit_max_side_traces "128" INI_SYSTEM Disponible Ă  partir de PHP 8.0.0
opcache.jit_max_exit_counters "8192" INI_SYSTEM Disponible Ă  partir de PHP 8.0.0
opcache.jit_hot_loop "61" INI_SYSTEM Disponible à partir de PHP 8.0.0. Avant PHP 8.5.0, la valeur par défaut était 64
opcache.jit_hot_func "127" INI_SYSTEM Disponible Ă  partir de PHP 8.0.0
opcache.jit_hot_return "8" INI_SYSTEM Disponible Ă  partir de PHP 8.0.0
opcache.jit_hot_side_exit "8" INI_SYSTEM Disponible Ă  partir de PHP 8.0.0
opcache.jit_blacklist_root_trace "16" INI_ALL Disponible Ă  partir de PHP 8.0.0
opcache.jit_blacklist_side_trace "8" INI_ALL Disponible Ă  partir de PHP 8.0.0
opcache.jit_max_loop_unrolls "8" INI_ALL Disponible Ă  partir de PHP 8.0.0
opcache.jit_max_recursive_calls "2" INI_ALL Disponible Ă  partir de PHP 8.0.0
opcache.jit_max_recursive_returns "2" INI_ALL Disponible Ă  partir de PHP 8.0.0
opcache.jit_max_polymorphic_calls "2" INI_ALL Disponible Ă  partir de PHP 8.0.0
Pour plus de dĂ©tails sur les modes INI_*, reportez-vous Ă  OĂč une directive de configuration peut ĂȘtre modifiĂ©e.

Voici un éclaircissement sur l'utilisation des directives de configuration.

opcache.enable bool
Active le cache d'opcode. Lorsqu'il est dĂ©sactivĂ©, le code n'est ni optimisĂ©, ni mis en cache. Le paramĂ©trage de opcache.enable ne peut ĂȘtre activĂ© pendant l'exĂ©cution via la fonction ini_set(), il ne peut ĂȘtre que dĂ©sactivĂ©. Tenter de l'activer dans un script va gĂ©nĂ©rer une alerte.
opcache.enable_cli bool
Active le cache d'opcode pour la version CLI de PHP.
opcache.memory_consumption int
La taille de la mémoire partagée utilisée par OPcache, en mégaoctets. La valeur minimale permissible est "8", qui est forcé si une valeur plus petite est définie.
opcache.interned_strings_buffer int
La quantité de mémoire utilisée pour stocker des chaßnes internes, en mégaoctets. La valeur maximale est de 32767 sur les architectures 64 bits, et de 4095 sur les architectures 32 bits.

Note: Avant PHP 8.4.0, la valeur maximale était de 4095 mégaoctets sur toutes les architectures.

opcache.max_accelerated_files int
Le nombre maximal de clés (et donc, de scripts) dans la table de hachage d'OPcache. La valeur actuellement utilisée sera le premier nombre du jeu des nombres premiers { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987, 262237, 524521, 1048793 } qui est plus grand ou égal que la valeur configurée. La valeur minimale est 200. La valeur maximale est 100000 dans PHP < 5.5.6, et 1000000 dans les versions ultérieures. Les valeurs hors de cet intervalle sont fixées à l'intervalle autorisé.
opcache.max_wasted_percentage int
Le pourcentage maximum de mémoire gaspillée autorisée avant qu'un redémarrage ne soit programmé, s'il n'y a pas assez de mémoire disponible. La valeur maximale permissible est "50", qui est forcé si une valeur plus grande est définie.
opcache.use_cwd bool
Si activé, OPcache ajoute le dossier de travail courant à la clé du script, éliminant ainsi les collisions possibles entre les fichiers dont le nom de base est identique. Le fait de désactiver cette fonctionnalité améliore les performances, mais peut casser les applications existantes.
opcache.validate_timestamps bool

Si activé, OPcache va vérifier les mises à jour des scripts toutes les opcache.revalidate_freq secondes. Lorsque cette directive est désactivée, il faut réinitialiser OPcache manuellement via la fonction opcache_reset(), la fonction opcache_invalidate() ou en redémarrant le serveur Web pour que les modifications du systÚme de fichiers prennent effet.

Note: OPcache peut toujours valider l'horodatage d'un fichier lors de la compilation si les options opcache.file_update_protection ou opcache.max_file_size sont définies sur des valeurs non nulles.

opcache.revalidate_freq int
La frĂ©quence de vĂ©rification du timestamp du script afin de dĂ©tecter les possibles mises Ă  jour, en secondes. La valeur 0 fera qu'OPcache vĂ©rifiera les mises Ă  jour Ă  chaque requĂȘte. Cette directive de configuration est ignorĂ©e si opcache.validate_timestamps est dĂ©sactivĂ©.
opcache.revalidate_path bool
Si dĂ©sactivĂ©, les fichiers en cache existant utilisant le mĂȘme include_path seront rĂ©utilisĂ©s. Aussi, si un fichier avec le mĂȘme nom est quelque part ailleurs dans le include_path, il ne sera pas trouvĂ©.
opcache.save_comments bool
Si désactivé, tous les commentaires de documentation seront supprimés du cache opcode afin de réduire la taille du code optimisé. La désactivation de cette directive peut casser des applications et des frameworks qui s'appuient sur l'analyse des commentaires pour les annotations, comme Doctrine, Zend Framework 2 et PHPUnit.
opcache.fast_shutdown bool
Si activĂ©, une sĂ©quence d'arrĂȘt rapide sera utilisĂ©e, qui ne libĂšre pas chaque bloc allouĂ©, mais s'appuie sur le gestionnaire de mĂ©moire Zend Engine pour dĂ©sallouer le jeu entier des variables de requĂȘtes, en masse. Cette directive a Ă©tĂ© supprimĂ©e dans PHP 7.2.0. Une variante de la sĂ©quence d'arrĂȘt rapide a Ă©tĂ© intĂ©grĂ©e dans PHP et sera automatiquement utilisĂ©e si possible.
opcache.enable_file_override bool
Lorsqu'activé, le cache opcode sera vérifié pour savoir si un fichier a déjà été mis en cache lorsque les fonctions file_exists(), is_file() et is_readable() sont appelées. Ceci peut accroßtre les performances des applications qui vérifient l'existence et la lisibilité des scripts PHP, mais risque de retourner des données périmées si opcache.validate_timestamps est désactivé.
opcache.optimization_level int
Un masque de bits qui contrÎle quelles passes d'optimisation sont exécutées. La valeur par défaut est 0x7FFEBFFF, qui active toutes les optimisations sûres. Désactiver des optimisations ou activer des optimisations non sûres est surtout utile pour déboguer/développer l'optimiseur. Chaque bit dans le masque de bits active une passe d'optimisation spécifique :
Masque de bits des passes d'optimisation
Bit Nom de la passe Description Défaut
0 PASS_1 Optimisations peephole simples Activé
1 PASS_2 Inutilisé (a été fusionné dans PASS_1) Activé
2 PASS_3 Optimisation de saut simple Activé
3 PASS_4 Optimisation des appels Activé
4 PASS_5 Optimisation basée sur le graphe de flux de contrÎle Activé
5 PASS_6 Optimisation basée sur l'analyse de flux de données Activé
6 PASS_7 Indique si le graphe d'appels doit ĂȘtre utilisĂ© pour les optimisations SSA ActivĂ©
7 PASS_8 Propagation conditionnelle de constantes creuses Activé
8 PASS_9 Optimisation des variables temporaires Activé
9 PASS_10 Suppression des opcodes NOP Activé
10 PASS_11 Compactage des littéraux Activé
11 PASS_12 Pré-calcul de la taille de la pile d'appels Activé
12 PASS_13 Suppression des variables inutilisées Activé
13 PASS_14 Élimination du code mort ActivĂ©
14 PASS_15 Collecte et substitution des déclarations de constantes (non sûr) Désactivé
15 PASS_16 Inlining de fonctions triviales (partie de l'optimisation des appels) Activé
16 (Drapeau) Ignorer la possibilité de surcharge d'opérateur (non sûr) Désactivé

Note: Optimisations sûres vs non sûres
Les optimisations sûres (activées par défaut) préservent le comportement exact du code PHP tout en améliorant les performances. Elles incluent l'élimination du code mort, le repliement de constantes et l'optimisation des sauts. Les optimisations non sûres (désactivées par défaut) peuvent altérer le comportement dans des cas particuliers :

  • Bit 14 : Collecte des constantes. Les constantes sont substituĂ©es Ă  la compilation, ignorant l'ordre de dĂ©claration Ă  l'exĂ©cution :
    <?php
    echo getA(); // Affiche : "hello" au lieu de lancer une Error
    const A = "hello";
    function
    getA() { return A; }
  • Bit 16 : Ignorer la surcharge d'opĂ©rateur. Non sĂ»r lors de l'utilisation de classes avec do_operation (par exemple GMP, BCMath) dans des opĂ©rations arithmĂ©tiques. Avec des dĂ©clarations de type, l'optimiseur peut appliquer les mĂȘmes optimisations en toute sĂ©curitĂ©.
opcache.inherited_hack bool
Cette directive de configuration est ignorée.
opcache.dups_fix bool
Ce hack ne doit ĂȘtre activĂ© que comme solution de contournement des erreurs "Cannot redeclare class".
opcache.blacklist_filename string
L'endroit de stockage du fichier gĂ©rant la liste noire OPcache. Un fichier de liste noire est un fichier texte contenant des noms de fichiers qui ne doivent pas ĂȘtre accĂ©lĂ©rĂ©s ; un par ligne. Les jokers sont autorisĂ©s, et les prĂ©fixes peuvent Ă©galement ĂȘtre fournis. Les lignes commençant par un point-virgule sont vues comme des commentaires et seront donc ignorĂ©es. Un fichier de liste noire simple ressemble Ă  ceci :
; Correspond à un fichier spécifique.
/var/www/broken.php
; Un préfixe qui correspond à tous les fichiers qui commencent par x.
/var/www/x
; Une correspondance avec un joker.
/var/www/*-broken.php
opcache.max_file_size int
La taille maximale du fichier pouvant ĂȘtre mis en cache, en octets. Si vaut 0, tous les fichiers pourront ĂȘtre mis en cache.
opcache.consistency_checks int
Si la valeur est diffĂ©rente de zĂ©ro, OPcache va vĂ©rifier la somme de contrĂŽle du cache toutes les N requĂȘtes, oĂč N est la valeur de cette directive de configuration. Ceci ne doit ĂȘtre activĂ© que lors du dĂ©bogage, sachant qu'il impacte fortement les performances.

Note: Désactivé à partir de PHP 8.1.18 et 8.2.5. Supprimé à partir de PHP 8.3.0.

opcache.force_restart_timeout int
La durée à attendre pour le début d'un redémarrage programmé, si le cache n'est pas activé, en secondes. Si ce délai d'attente est atteint, alors OPcache imagine que quelque chose se passe mal, et va tuer les processus gérant les verrous sur le cache pour permettre un redémarrage. Si opcache.log_verbosity_level vaut 2 ou plus, un avertissement sera enregistré dans le journal d'événements des erreurs lorsque ce comportement survient. Cette directive n'est pas supportée sur Windows.
opcache.error_log string
Le log d'erreurs pour les erreurs OPcache. Une chaßne vide sera vue comme stderr, et les erreurs seront envoyées vers la sortie d'erreurs standard (qui sera le log des erreurs du serveur Web dans la plupart des cas).
opcache.log_verbosity_level int
Le niveau de verbosité des logs. Par défaut, seules les erreurs fatales (niveau 0) et les erreurs (niveau 1) seront enregistrées. Les autres niveaux disponibles sont les alertes (niveau 2), les messages d'information (niveau 3), et les messages de débogage (niveau 4).
opcache.record_warnings bool
Si cette option est activĂ©e, OPcache enregistrera les avertissements de compilation et les rejouera lors du prochain include, mĂȘme s'il est servi depuis le cache.
opcache.preferred_memory_model string
Le modÚle de mémoire préféré pour OPcache, à utiliser. Si laissé vide, OPcache va choisir le modÚle le plus approprié, ce qui est la meilleure façon de faire dans la plupart des cas. Les valeurs possibles sont mmap, shm, posix et win32.
opcache.protect_memory bool
ProtÚge la mémoire partagée des écritures inattendues pendant l'exécution des scripts. Ceci est utile uniquement pour du débogage interne.
opcache.mmap_base string
La base utilisĂ©e pour les segments de mĂ©moire partagĂ©e sous Windows. Tous les processus PHP doivent lier la mĂ©moire partagĂ©e dans le mĂȘme espace d'adresse. L'utilisation de cette directive permet de corriger les erreurs "Unable to reattach to base address".
opcache.restrict_api string
Autorise l'appel aux fonctions de l'API d'OPcache uniquement depuis des scripts PHP dont le chemin commence par une chaßne spécifique. La valeur par défaut, "", signifie "aucune restriction".
opcache.file_update_protection string
EmpĂȘche la mise en cache des fichiers datant moins que ce nombre de secondes. Ceci protĂšge de la mise en cache des fichiers incomplĂštement mis Ă  jour. Si toutes les mises Ă  jour de fichiers sont atomiques, les performances peuvent ĂȘtre augmentĂ©es en le dĂ©finissant Ă  0. Cela permettra de mettre en cache les fichiers immĂ©diatement.
opcache.huge_code_pages bool
Active ou désactive la copie de code PHP (segment de texte) dans des HUGE PAGES. Ceci devrait améliorer les performances, mais nécessite une configuration appropriée du systÚme d'exploitation. Disponible sur Linux à partir de PHP 7.0.0, et sur FreeBSD à partir de PHP 7.4.0.
opcache.lockfile_path string
Chemin absolu utilisé pour enregistrer les lockfiles partagés (pour *nix uniquement)
opcache.opt_debug_level string
Produit un vidage opcode pour déboguer les différentes étapes d'optimisation. 0x10000 affichera les opcodes tels que le compilateur les produit avant qu'aucune optimisation ne se produise alors que 0x20000 affichera les codes optimisés.
opcache.file_cache string
Active et définit le répertoire de cache de second niveau. Ceci devrait améliorer les performances quand la mémoire SHM est pleine, au redémarrage du serveur ou réinitialisation de SHM. La valeur par défaut "" désactive la mise en cache basée sur les fichiers.
opcache.file_cache_only bool
Active ou désactive la mise en cache de l'opcode dans la mémoire partagée.

Note: Avant PHP 8.1.0, désactiver cette directive avec un fichier de cache déjà rempli nécessite le vidage manuel du cache.

opcache.file_cache_consistency_checks bool
Active ou désactive la validation de la somme de contrÎle lorsque le script est chargé à partir du cache de fichiers.
opcache.file_cache_fallback bool
Implique opcache.file_cache_only=1 pour un certain processus qui a échoué à se rattacher à la mémoire partagée (pour Windows uniquement). Le cache de fichiers activé explicitement est requis.
Attention

DĂ©sactiver cette option de configuration peut empĂȘcher les processus de dĂ©marrer, et est donc dĂ©couragĂ©.

opcache.validate_permission bool
Valide les permissions des fichiers mises en cache par rapport Ă  l'utilisateur actuel.
opcache.validate_root bool
EmpĂȘche la collision de noms dans les environnements `chroot`Ă©s. Ceci devrait ĂȘtre activĂ© dans tous les environnements `chroot`Ă©s pour empĂȘcher l'accĂšs aux fichiers en-dehors du chroot.
opcache.preload string
SpĂ©cifie un script PHP qui sera compilĂ© et exĂ©cutĂ© lors du dĂ©marrage du serveur, et qui peut prĂ©charger d'autres fichiers, soit grĂące Ă  include ou en utilisant la fonction opcache_compile_file(). Toutes les entitĂ©s (par exemple fonctions et classes) dĂ©finies dans ces fichiers seront disponibles aux requĂȘtes prĂȘtes Ă  l'emploi, jusqu'Ă  ce que le serveur soit Ă©teint.

Note: Le préchargement n'est pas supporté sur Windows.

opcache.preload_user string
Permet au prĂ©chargement d'ĂȘtre exĂ©cutĂ© en tant qu'utilisateur systĂšme spĂ©cifiĂ©. Ceci est utile pour les serveurs qui dĂ©marrent en tant que root avant de passer Ă  un utilisateur systĂšme non privilĂ©giĂ©. Le prĂ©chargement en tant que root n'est pas autorisĂ© par dĂ©faut pour des raisons de sĂ©curitĂ©, sauf si cette directive est explicitement dĂ©finie sur root. À partir de PHP 8.3.0, cette directive n'a plus besoin d'ĂȘtre dĂ©finie afin d'autoriser le prĂ©chargement lors de l'exĂ©cution en tant que root avec CLI SAPI ou phpdbg SAPI.
opcache.cache_id string

Sur Windows, tous les processus exĂ©cutant le mĂȘme PHP SAPI sous le mĂȘme compte utilisateur ayant le mĂȘme ID de cache partagent une instance unique d'OPcache. La valeur de l'ID de cache peut ĂȘtre choisie librement.

Astuce

Pour IIS, des pools d'applications différentes peuvent avoir leur propre instance OPcache en utilisant la variable d'environnement APP_POOL_ID comme opcache.cache_id.

opcache.jit string|int
Pour un usage typique, cette option accepte une des quatre valeurs de chaĂźne suivantes :
  • disable: DĂ©sactivĂ© complĂštement, ne peut pas ĂȘtre activĂ© lors du runtime.
  • off: DĂ©sactivĂ©, mais peut ĂȘtre activĂ© lors du runtime.
  • tracing/on: Utilise le tracing JIT. ActivĂ© par dĂ©faut et recommandĂ© pour la plupart des utilisateurs.
  • function: Utilise le function JIT.

Pour un usage avancĂ©, cette option accepte un entier Ă  4 chiffres CRTO, oĂč les chiffres signifient :

C (Drapeaux d'optimisation spécifiques au CPU)
  • 0: DĂ©sactive les optimisations spĂ©cifiques au CPU.
  • 1: Active l'usage d'AVX, si le CPU le supporte.
R (allocation de registre)
  • 0: N'accomplit aucune allocation de registres
  • 1: Accomplit des allocations de registres au niveau d'un bloc.
  • 2: Accomplit des allocations de registres globales.
T (trigger/déclencheur)
  • 0: Compile toutes les fonctions lors du chargement du script.
  • 1: Compile les fonctions lors de leur premiĂšre exĂ©cution.
  • 2: Profile les fonctions lors de la premiĂšre requĂȘte et compile les fonctions les plus chaudes juste aprĂšs.
  • 3: Profile Ă  la volĂ©e et compile les fonctions chaudes.
  • 4: Actuellement inutilisĂ©.
  • 5: Utilise le tracing JIT. Profile Ă  la volĂ©e et compile les traces pour les segments de code chaud.
O (niveau d'optimisation)
  • 0: Pas de JIT.
  • 1: JIT minimal (appelle les handlers standard de la VM).
  • 2: Inline les handlers de la VM.
  • 3: Utilise l'infĂ©rence de type.
  • 4: Utilise un graphe d'appel.
  • 5: Optimise le script entier.
Le mode "tracing" correspond Ă  CRTO = 1254, le mode "function" correspond Ă  CRTO = 1205.
opcache.jit_buffer_size int
La quantité de mémoire partagée réservée pour du code compilé JIT. Une valeur de zéro désactive le JIT. Lorsqu'un entier est utilisé, sa valeur est mesurée en octets. Vous pouvez également utiliser la notation sténographique comme décrit dans cette entrée de la FAQ..
opcache.jit_debug int
Un masque de bits spécifiant quelle sortie de débogage de JIT activer Pour les valeurs possibles, consulter » zend_jit.h (voir les définitions de macro commençant par ZEND_JIT_DEBUG).
opcache.jit_bisect_limit int
Option de dĂ©bogage qui dĂ©sactive la compilation JIT aprĂšs la compilation d'un certain nombre de fonctions. Ceci peut ĂȘtre utile pour bissecter la source d'une mauvaise compilation JIT. Remarque : cette option ne fonctionne que lorsque le dĂ©clencheur JIT est dĂ©fini Ă  0 (compilation au chargement du script) ou 1 (compilation Ă  la premiĂšre exĂ©cution), par exemple, opcache.jit=1215. Voir plus dans l'option opcache.jit.
opcache.jit_prof_threshold float
Lors de l'utilisation du mode de dĂ©clencheur "profile les fonctions lors de la premiĂšre requĂȘte", cette limite dĂ©termine si une fonction est considĂ©rĂ©e chaude. Le nombre d'appels Ă  la fonction divisĂ© par le nombre d'appels Ă  toutes les fonctions doit ĂȘtre supĂ©rieur Ă  cette limite. Par exemple, une limite de 0.005 signifie qu'une fonction qui correspond Ă  plus de 0.5% de tous les appels sera compilĂ©e JIT.
opcache.jit_max_root_traces int
Nombre maximal de traces racines (root traces). La trace racine est un flux d'exécution prenant d'abord un chemin à travers le code, qui est une unité de la compilation JIT. JIT ne compilera pas de nouveau code s'il atteint cette limite.
opcache.jit_max_side_traces int
Nombre maximal de traces adjacentes (side traces) qu'une trace racine peut avoir. La trace adjacente est un autre flux d'exĂ©cution qui ne suit pas le chemin de la trace racine compilĂ©e. Les traces adjacentes appartenant Ă  la mĂȘme trace racine ne seront pas compilĂ©es si elles atteignent cette limite.
opcache.jit_max_exit_counters int
Nombre maximal de compteurs de sortie de trace adjacente. Ceci limite le nombre total de traces adjacentes qu'il peut y avoir, Ă  travers toutes les traces racines.
opcache.jit_hot_loop int
AprÚs combien d'itérations une boucle est considérée chaude. L'intervalle de valeurs valides est [0,255] ; pour tout paramÚtre hors de cette plage, par exemple -1 ou 256, la valeur par défaut sera utilisée à la place. Spécialement, une valeur nulle désactivera le JIT pour tracer et compiler toutes les boucles.

Note: Il est recommandé de définir ce paramÚtre comme un nombre premier, afin d'éviter qu'il ne soit un multiple du nombre d'itérations des boucles.

opcache.jit_hot_func int
AprÚs combien d'appels une fonction est considérée chaude. La plage de valeurs valides est [0,255] ; pour tout paramÚtre hors de cette plage, par exemple -1 ou 256, la valeur par défaut sera utilisée à la place. Spécialement, une valeur nulle désactivera le JIT pour tracer et compiler toutes les fonctions.
opcache.jit_hot_return int
AprÚs combien de retours un retour est considéré chaud. La plage de valeurs valides est [0,255] ; pour tout paramÚtre hors de cette plage, par exemple -1 ou 256, la valeur par défaut sera utilisée à la place. Spécialement, une valeur nulle désactivera le JIT pour tracer et compiler tous les retours.
opcache.jit_hot_side_exit int
AprÚs combien de sorties une sortie adjacente est considérée chaude. La plage de valeurs valides est [0,255] ; pour tout paramÚtre hors de cette plage, par exemple -1 ou 256, la valeur par défaut sera utilisée à la place. Spécialement, une valeur nulle désactivera le JIT pour tracer et compiler toutes les sorties latérales.
opcache.jit_blacklist_root_trace int
Nombre maximal de tentatives de compilation d'une trace racine avant que celle-ci ne soit exclue.
opcache.jit_blacklist_side_trace int
Nombre maximal de tentatives de compilation d'une trace adjacente avant que celle-ci ne soit exclue.
opcache.jit_max_loop_unrolls int
Nombre maximal de tentatives pour dérouler une boucle dans une trace adjacente, tentant d'atteindre la trace racine et de fermer la boucle extérieure.
opcache.jit_max_recursive_calls int
Nombre maximal d'appels récursifs déroulés dans une boucle.
opcache.jit_max_recursive_returns int
Nombre maximal de retours récursifs déroulés dans une boucle.
opcache.jit_max_polymorphic_calls int
Nombre maximal de tentatives pour inliner un appel polymorphe (dynamique ou méthode). Les appels au-dessus de cette limite sont traités comme mégamorphes et ne sont pas inlinés.
add a note

User Contributed Notes 8 notes

up
17
damien at overeem dot org ¶
9 years ago
When using PHP on a windows platform and enabling opcache, you might run into occasional 500 errors. These will appear to show up entirely random.

When this happens, your windows Event log (Windows Logs/Application) will show (probably multiple)  entries from Zend OPcache with Event ID 487. Further information will state the following error message: "Base address marks unusable memory region".

This issue can be resolved by adding the following to your php.ini:

    opcache.mmap_base = 0x20000000

Unfortunately I do not know the significance of the value "0x20000000". I can only tell you that this value works to solve the problem (Tried and tested)
up
7
carneiro at isharelife dot com dot br ¶
6 years ago
If you try to allocate more memory that is available using opcache.memory_consumption PHP stops working without any logs to help on debugging. This issue took me 4 hours to solve when creating a staging server with same configrations and less memory that was available on production server.
up
6
tizian dot schmidlin at gmail dot com ¶
7 years ago
It should be noted that according to the original RFC (https://wiki.php.net/rfc/preload) `opcache.preload` caches preloaded files *forever* for all instances of the underlying PHP process.

That means, that hosting multiple websites on the same server might result in some unexpected behaviour.

Concrete example: 
- you have a Symfony 3.2 App (which might be an endpoint of some type) and a Symfony 3.4 App (which might be your main application)
- both apps have a main Class called App that is in the same namespace (as it is usual, since the class name is unique to each project)
- depending on which app is loaded first, one or the other will work, since `opcache.preload` has no file based distinction of what class is used where and simply provides them to the user space

This is avoidable by simply not preloading user space classes or, if you work with FPM, by defining a pool for each app.

In order to optimize memory consumption, you might also use a common FPM Pool for all Symfony 3.4 Apps and preload the entire framework in there and simply not preload user space classes (which might be cached by opcache anyway but is slower, since it will be checked if the file has changed on every request).
up
7
wessos at example dot org ¶
7 years ago
The optimization levels as of php 7.3 are the following:

#define ZEND_OPTIMIZER_PASS_1        (1<<0)   /* CSE, STRING construction     */
#define ZEND_OPTIMIZER_PASS_2        (1<<1)   /* Constant conversion and jumps */
#define ZEND_OPTIMIZER_PASS_3        (1<<2)   /* ++, +=, series of jumps      */
#define ZEND_OPTIMIZER_PASS_4        (1<<3)   /* INIT_FCALL_BY_NAME -> DO_FCALL */
#define ZEND_OPTIMIZER_PASS_5        (1<<4)   /* CFG based optimization       */
#define ZEND_OPTIMIZER_PASS_6        (1<<5)   /* DFA based optimization       */
#define ZEND_OPTIMIZER_PASS_7        (1<<6)   /* CALL GRAPH optimization      */
#define ZEND_OPTIMIZER_PASS_8        (1<<7)   /* SCCP (constant propagation)  */
#define ZEND_OPTIMIZER_PASS_9        (1<<8)   /* TMP VAR usage                */
#define ZEND_OPTIMIZER_PASS_10        (1<<9)   /* NOP removal                 */
#define ZEND_OPTIMIZER_PASS_11        (1<<10)  /* Merge equal constants       */
#define ZEND_OPTIMIZER_PASS_12        (1<<11)  /* Adjust used stack           */
#define ZEND_OPTIMIZER_PASS_13        (1<<12)  /* Remove unused variables     */
#define ZEND_OPTIMIZER_PASS_14        (1<<13)  /* DCE (dead code elimination) */
#define ZEND_OPTIMIZER_PASS_15        (1<<14)  /* (unsafe) Collect constants */
#define ZEND_OPTIMIZER_PASS_16        (1<<15)  /* Inline functions */

Source: https://lxr.room11.org/xref/php-src%40master/ext/opcache/Optimizer/zend_optimizer.h
up
6
bdurand at ensemblegroup dot net ¶
9 years ago
It would appear as though the [opcache.enable] setting is indeed NOT PHP_INI_ALL.
For changing it within user.ini yields no effect when disabled at global level. user.ini is ignored for that setting.
up
1
JReezy ¶
2 years ago
Despite the set of values for opcache.max_accelerated_files including the value 1048793, the maximum as stated is 1000000. If you select a number above 1000000 the value is set its default which is 10000.
up
0
olliejones at gmail dot com ¶
2 months ago
In the OPcache, notice that the memory used for interned (deduplicated) text strings comes out of the total OPcache shared memory storage size.

So, for example, if you have these settings: 

opcache.memory_consumption=128

opcache.interned_strings_buffer=32

you have only left 96MB  (MiB) for OPcache's bytecode cache.
up
-2
daniel at elementor dot com ¶
2 years ago
When opcache.use_cwd=0 include/require of relative paths from different directories will both resolve to the same (first) file.

Example dir structure:
app1
  index.php
  lib.php
app2
  index.php
  lib.php

both index.php(s):
include "lib.php"; 

app1/lib.php:
echo "app1";

app2/lib.php:
echo "app2";

both will echo "app1".