## Configuration à l'exécution

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

Bien que les réglages par défaut d'APCu fonctionnent correctement sur de nombreuses installations, il est utile de penser à ajuster ces paramètres de configuration.

Une question importante pour la configuration d'APCu est quelle est la taille adéquate qui doit être allouée dans la mémoire à APCu. La directive ini qui contrôle ce paramètre est `apc.shm_size`. Le paragraphe ci-dessous est important pour répondre à cette question.

Une fois le serveur lancé, le script `apc.php`, disponible avec l'extension, peut être copié dans le document root et exécuté par le navigateur. Ce script fournit une analyse détaillée du fonctionnement interne de APCu. Si la bibliothèque GD est activée dans PHP alors le script peut afficher des graphiques pertinents.

Si APCu fonctionne, le nombre de `Cache full count` (à gauche) affichera le nombre de fois où le cache a atteint sa capacité maximale et a dû évacuer des entrées pour libérer de la mémoire. Pendant l'évacuation, si `apc.ttl` a été spécifié, APCu essaiera d'abord de supprimer les entrées expirées, c'est-à-dire les entrées dont le TTL a expiré ou les entrées qui n'ont pas de TTL défini et qui n'ont pas été consultées au cours des dernières `apc.ttl` secondes. Si `apc.ttl` n'a pas été défini ou si la suppression des entrées expirées n'a pas libéré suffisamment d'espace, APCu effacera l'intégralité du cache.

Le nombre d'évictions devrait être minimal dans un cache bien configuré. Si le cache est constamment rempli et donc libéré de force, le brassage résultant aura des effets préjudiciables sur les performances du script. Le moyen le plus simple de réduire ce nombre est d'allouer plus de mémoire à APCu.

Lorsque APCu est compilé avec mmap (Memory Mapping), il n'utilisera qu'un seul segment de mémoire, contrairement au cas où APCu est construit avec SHM (SysV Shared Memory) qui utilise plusieurs segments de mémoire. MMAP n'a pas de limite maximale comme SHM dans `/proc/sys/kernel/shmmax`. En général, l'utilisation de MMAP est recommandée car il réclame la mémoire plus vite lorsque le serveur web est redémarré et réduit l'impact sur l'allocation de mémoire au démarrage.

Options de configuration d'APCu
Nom | Défaut | Modifiable | Historique
--- | --- | --- | ---
apc.enabled | "1" | `INI_SYSTEM` |
apc.shm_segments | "1" | `INI_SYSTEM` |
apc.shm_size | "32M" | `INI_SYSTEM` |
apc.entries_hint | "4096" | `INI_SYSTEM` |
apc.ttl | "0" | `INI_SYSTEM` |
apc.gc_ttl | "3600" | `INI_SYSTEM` |
apc.mmap_file_mask | NULL | `INI_SYSTEM` |
apc.slam_defense | "0" | `INI_SYSTEM` |
apc.enable_cli | "0" | `INI_SYSTEM` |
apc.use_request_time | "0" | `INI_ALL` | Antérieurement à APCu 5.1.19, la valeur par défaut était `1`.
apc.serializer | "php" | `INI_SYSTEM` | Antérieurement à APCu 5.1.15, la valeur par défaut était `"default"`.
apc.coredump_unmap | "0" | `INI_SYSTEM` |
apc.preload_path | NULL | `INI_SYSTEM` |

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.

`apc.enabled` bool

  `apc.enabled` peut être mis à 0 pour désactiver APC. Cela peut s'avérer utile lorsqu'APC est compilé statiquement dans PHP puisqu'il n'y a pas d'autre moyen de le désactiver (lorsque APC est compilé en tant que DSO, la ligne `extension` dans le fichier `php.ini` peut simplement être mise en commentaire).

`apc.shm_segments` int

  Le nombre de segments de mémoire partagée à allouer au cache de compilation Si APC manque de mémoire partagée mais que `apc.shm_size` est mis à la valeur maximale autorisée par le système, alors augmenter cette valeur peut empêcher APC d'épuiser sa mémoire.

`apc.shm_size` string

  La taille de chaque segment de mémoire partagée donnée en notation abrégée comme indiquée dans cette FAQ. Par défaut, certains systèmes (dont la plus part des variants de BSD) ont une limite très basse pour la taille d'un segment de mémoire partagée.

`apc.entries_hint` int

  Un "indice" sur le nombre de variables distinctes qui peuvent être stockées. Mettre à zéro ou dans le doute omettre.

`apc.ttl` int

  Considérer que les entrées de cache sans TTL explicite sont expirées si elles n'ont pas été consultées depuis autant de secondes. En effet, cela permet à ces entrées d'être opportunément supprimées lors d'une insertion dans le cache, ou avant une suppression complète. Notez que parce que la suppression est opportuniste, les entrées peuvent toujours être lisibles même si si elles sont plus anciennes que `apc.ttl` secondes. Ce paramètre n'a aucun effet sur les entrées de cache pour lesquelles un un TTL explicite est spécifié.

`apc.gc_ttl` int

  Le nombre de secondes pendant lesquelles une entrée de cache peut rester sur la liste de collecte des ordures après avoir été retirée ou invalidée. Les entrées sont éligibles à la suppression si leur nombre de références est zéro, ou si elles dépassent cette limite de temps. Si défini à `0`, le nettoyage basé sur le temps est désactivé, et les entrées ne sont supprimées que lorsque leur nombre de références tombe à zéro.

`apc.mmap_file_mask` string

  Si APCu a été compilé avec l'option MMAP en utilisant `--enable-mmap`, ce paramètre reçoit le masque de fichier de type mktemp-style à passer au module mmap pour déterminer si la région de la mémoire utilisant mmap sera sauvegardée par le biais d'un fichier ou par celui de la mémoire partagée. Dans le cas où la sauvegarde se fait par le biais d'un fichier, le masque sera de la forme `/tmp/apc.XXXXXX` (avec exactement 6 `X`). Pour utiliser shm_open/mmap de la norme POSIX, le masque doit contenir `.shm`, comme dans l'exemple suivant: `/apc.shm.XXXXXX`. Ce paramètre peut être défini par `/dev/zero` pour utiliser l'interface `/dev/zero` du noyau avec une mémoire utilisant mmap anonymement. Laisser ce paramètre indéfini forcera un mmap anonyme.

`apc.slam_defense` bool

  Au démarrage ou lors de la modification d'un fichier dans un serveur très occupé, plusieurs processus peuvent entrer en compétition pour mettre en cache un même fichier en même temps. Configurer `apc.slam_defense` sur `1` peut aider à empêcher plusieurs processus de mettre en cache le même fichier simultanément en introduisant un mécanisme de probabilité. Si la même clé est tentée d'être mise en cache dans un court laps de temps par différents processus, elle saute la mise en cache pour le processus actuel pour atténuer les éventuels problèmes de mise en cache.

`apc.enable_cli` int

  Principalement utilisé pour les tests et le débogage. Définir ce paramètre permet d'activer APC dans la version CLI de PHP. En temps normal, il n'est pas idéal de créer, alimenter et détruire le cache APC à chaque requête CLI. Cependant, dans de nombreux scénarios de test il est utile de pouvoir activer facilement APC dans la version CLI de PHP.

`apc.serializer` string

  Ce paramètre permet à APC d'utiliser un sérialiseur tiers

`apc.coredump_unmap` bool

  Active la gestion par APC de signaux, tels que SIGSEGV, qui provoquent l'écriture de fichiers core dump lorsqu'ils sont reçus. Quand ces signaux sont reçus, APC essaiera de désallouer le segment de mémoire partagée réservé à mmap dans le but de l'exclure du fichier core dump. Cette option peut améliorer la stabilité du système lorsque des signaux fatals sont reçus et qu'APC est configuré avec un long segment de mémoire partagée.

  Avertissement

  Cette option est potentiellement dangereuse. Désallouer un segment de mémoire partagée utilisé par mmap dans le gestionnaire de signaux fatals peut causer un comportement imprévisible si une erreur fatale survient.

  > Note:

  > Bien que certains noyaux peuvent fournir la possibilité d'ignorer de nombreux types de mémoire partagée lorsqu'ils génèrent un fichier core dump, ces implémentations peuvent aussi ignorer d'importants segments de mémoire partagée tels que le tableau de bord d'Apache.

`apc.preload_path` string

  Optionnel, définit un chemin vers le répertoire où APC chargera les données du cache au démarrage.

`apc.use_request_time` bool

  Utilise la requête start time de l'interface SAPI pour la durée de vie (TTL).