LaravelConf Taiwan 2020 CFP Started

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" PHP_INI_ALL  
opcache.enable_cli "0" PHP_INI_SYSTEM Entre PHP 7.1.2 et 7.1.6 inclusivement, la valeur par défaut était de "1"
opcache.memory_consumption "128" PHP_INI_SYSTEM Antérieur à PHP 7.0.0 la valeur par défaut était "64"
opcache.interned_strings_buffer "8" PHP_INI_SYSTEM Antérieur à PHP 7.0.0 la valeur par défaut était "4"
opcache.max_accelerated_files "10000" PHP_INI_SYSTEM Antérieur à PHP 7.0.0 la valeur par défaut était "2000"
opcache.max_wasted_percentage "5" PHP_INI_SYSTEM  
opcache.use_cwd "1" PHP_INI_SYSTEM  
opcache.validate_timestamps "1" PHP_INI_ALL  
opcache.revalidate_freq "2" PHP_INI_ALL  
opcache.revalidate_path "0" PHP_INI_ALL  
opcache.save_comments "1" PHP_INI_SYSTEM  
opcache.load_comments "1" PHP_INI_ALL Supprimé en PHP 7.0.0.
opcache.fast_shutdown "0" PHP_INI_SYSTEM Supprimé en PHP 7.2.0.
opcache.enable_file_override "0" PHP_INI_SYSTEM  
opcache.optimization_level "0x7FFEBFFF" PHP_INI_SYSTEM Modifié depuis 0x7FFFBFFF en PHP 7.3.0, et depuis 0xFFFFFFFF en PHP 5.6.18
opcache.inherited_hack "1" PHP_INI_SYSTEM Supprimé en PHP 7.3.0
opcache.dups_fix "0" PHP_INI_ALL  
opcache.blacklist_filename "" PHP_INI_SYSTEM  
opcache.max_file_size "0" PHP_INI_SYSTEM  
opcache.consistency_checks "0" PHP_INI_ALL  
opcache.force_restart_timeout "180" PHP_INI_SYSTEM  
opcache.error_log "" PHP_INI_SYSTEM  
opcache.log_verbosity_level "1" PHP_INI_SYSTEM  
opcache.preferred_memory_model "" PHP_INI_SYSTEM  
opcache.protect_memory "0" PHP_INI_SYSTEM  
opcache.mmap_base NULL PHP_INI_SYSTEM  
opcache.restrict_api "" PHP_INI_SYSTEM  
opcache.file_update_protection "2" PHP_INI_ALL  
opcache.huge_code_pages "0" PHP_INI_SYSTEM  
opcache.lockfile_path "/tmp" PHP_INI_SYSTEM  
opcache.opt_debug_level "0" PHP_INI_SYSTEM Disponible à partir de PHP 7.1.0
opcache.file_cache NULL PHP_INI_SYSTEM Disponible à partir de PHP 7.0.0
opcache.file_cache_only "0" PHP_INI_SYSTEM Disponible à partir de PHP 7.0.0
opcache.file_cache_consistency_checks "1" PHP_INI_SYSTEM Disponible à partir de PHP 7.0.0
opcache.file_cache_fallback "1" PHP_INI_SYSTEM Windows uniquement. Disponible à partir de PHP 7.0.0
opcache.validate_permission "0" PHP_INI_SYSTEM Disponible à partir de PHP 7.0.14
opcache.validate_root "0" PHP_INI_SYSTEM Disponible à partir de PHP 7.0.14
opcache.preload "" PHP_INI_SYSTEM Disponible à partir de PHP 7.4.0
opcache.preload_user "" PHP_INI_SYSTEM Disponible à partir de PHP 7.4.0
opcache.cache_id "1" PHP_INI_SYSTEM Windows uniquement. Disponible à partir de PHP 7.4.0
Pour plus de détails sur les modes PHP_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éen

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éen

Active le cache d'opcode pour la version CLI de PHP.

opcache.memory_consumption entier

La taille de la mémoire partagée utilisée par OPcache, en megabytes.

opcache.interned_strings_buffer entier

La quantité de mémoire utilisée pour stocher des chaînes internes, en megabytes. Cette directive de configuration est ignorée dans PHP < 5.3.0.

opcache.max_accelerated_files entier

Le nombre maximal de clés (et donc, de scripts) dans la table de hashage d'OPcache. La valeur actuellement utilisée sera le premier nombre du jeux 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érieur.

opcache.max_wasted_percentage entier

Le pourcentage maximum de mémoire gaspillée autorisée avant qu'un redémarrage ne soit programmé.

opcache.use_cwd booléen

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 fonctionalité améliore les performances, mais peut casser les applications existantes.

opcache.validate_timestamps booléen

Si activé, OPcache va vérifier les mises à jour des scripts toutes les opcache.revalidate_freq secondes. Lorsque cette directive est désactivée, vous devez 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 ne prennent effet.

opcache.revalidate_freq entier

La fréquence de vérification du timestamps du script afin de détecter les possibles mises à jour, en secondes. La valeur 0 fera qu'OPcache vérifira les mises à jour à chaque requête.

Cette directive de configuration est ignorée si opcache.validate_timestamps est désactivé.

opcache.revalidate_path booléen

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éen

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.load_comments booléen

Si désactivé, les commentaires de documentation ne seront pas chargés depuis le cache opcode, y compris s'ils existent. Cette directive peut être utilisée avec opcache.save_comments pour ne charger les commentaires que pour les applications qui les demandent.

opcache.fast_shutdown booléen

Si activé, une séquence d'arrêt rapide sera utilisé, qui ne libère pas chaque bloc alloué, mais s'appuie sur le gestionnaire de mémoire Zend Engine pour désallouer le jeux entier des variables de requêtes, en masse.

Cette directive a été supprimé dans PHP 7.2.0. Une variante de la séquence d'arrêt rapide a été intégré dans PHP et sera automatiquement utilisé si possible.

opcache.enable_file_override booléen

Lorsqu'activé, le cache opcode sera vérifié pour savoir si un fichier a déjà été mise 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 entier

Un masque de bits qui contrôle l'optimisation passée à exécuter.

opcache.inherited_hack booléen

En PHP < 5.3, OPcache stocke les endroits où les opcodes DECLARE_CLASS utilisent l'héritage ; lorsqu'un fichier est chargé, OPcache tente de lier les classes héritées en utilisant l'environnement courant. Le problème est que, malgré le fait que l'opcode DECLARE_CLASS peut ne pas être nécessaire pour le script courant, si le script requiert que l'opcode doit être défini, il peut ne pas s'exécuter.

Cette directive de configuration est ignorée en PHP 5.3 et suivant.

opcache.dups_fix booléen

Ce hack ne doit être activé que comme solution de contournement des erreurs "Cannot redeclare class".

opcache.blacklist_filename chaîne de caractères

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 entier

La taille maximale du fichier pouvant être mis en cache, en octets. Si vaut 0, tous les fichiers pourront être mise en cache.

opcache.consistency_checks entier

Si vaut différent 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.

opcache.force_restart_timeout entier

La durée à attendre pour le début d'un redémarrage programmé, si le cache n'est pas activé, en seconde. Si ce délait 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ée dans le journal d'événements des erreurs lorsque ce comportement survient.

opcache.error_log chaîne de caractères

Le log d'erreurs pour les erreurs OPcache. Une chaîne vide sera vu comme stderr, et les erreurs seront envoyées vers la sortie d'erreurs standart (qui sera le log des erreurs du serveur Web dans la plupart des cas).

opcache.log_verbosity_level entier

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.preferred_memory_model chaîne de caractères

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éen

Protège la mémoire partagée des écritures non-approuvées pendant l'exécution des scripts. Ceci est utile uniquement pour du débogage interne.

opcache.mmap_base chaîne de caractères

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 chaîne de caractères

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 chaîne de caractères

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 sur votre site sont atomiques, vous pouvez augmenter les performances en le définissant à "0".

opcache.huge_code_pages chaîne de caractères

Active ou désactive la copie de code PHP (segment de texte) dans des HUGE PAGES. Ceci devrait améliorer les performanes, mais nécessite une configuration approprié du système d'exploitation.

opcache.lockfile_path chaîne de caractères

Chemin absolue utilisé pour enregistrer les lockfiles partagés (pour *nix uniquement)

opcache.opt_debug_level chaîne de caractères

Produit un vidage opcode pour déboguer les différents étapes d'optimisation. 0x10000 affichera les opcodes tel que le compilateur les produit avant qu'aucune optimisation se produisent alors que 0x20000 affichera les codes optimisés.

opcache.file_cache chaîne de caractères

Active et définie le répertoire de cache de second niveau. Ceci devrait améliorer les performanes quand la mémoire SHM est pleine, au redémarage du serveur ou réinitialisation de SMH. La valeur par défaut "" désactive la mise en cache basée sur les fichiers.

opcache.file_cache_only booléen

Active ou désactive la mise en cache de l'opcode dans la mémoire partagée.

opcache.file_cache_consistency_checks booléen

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éen

Insinue opcache.file_cache_only=1 pour un certain processus qui a échoué de se réattacher à 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, Disabling this configuration option may prevent processes to start, et est donc découragé.

opcache.validate_permission booléen

Valide les permissions des fichiers mises en cache par rapport à l'utilisateur actuel.

opcache.validate_root booléen

Empêche la collision de noms dans les environnements `chroot`ées. Ceci devrait être activé dans tous les environnements `chroot`ées pour empêcher l'accès aux fichiers en-dehors du chroot.

opcache.preload chaîne de caractères

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 functions et classes) définit dans ces fichiers seront disponible aux requêtes prêt à l'emploi, jusqu'à ce que le serveur soit éteint.

opcache.preload_user chaîne de caractères

Le code de préchargement en tant que racine n'est pas autorisé pour des raisons de sécurité. Cette directive facilite la gestion du préchargement en tant qu'utilisateur.

opcache.cache_id chaîne de caractères

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 partage une instance unique de OPcache. La valeur de l'ID de cache peut être choisi librement.

add a note add a note

User Contributed Notes 7 notes

up
5
wessos at example dot org
1 year 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
12
damien at overeem dot org
3 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
4
tizian dot schmidlin at gmail dot com
1 year 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
1
carneiro at isharelife dot com dot br
4 months 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
2
bdurand at ensemblegroup dot net
3 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
-8
paul dot lindgreen at msvu dot ca
1 year ago
Is opcache.memory_consumption limited by max_memory? If not what limitations are there, can you have too much?
up
-11
BR
4 years ago
opcache.max_wasted_percentage must have a value between 1 and 50. Otherwise it will automatically set the variable 5 %.
To Top