1 votes

La taille du cache PHP d'APC ne dépasse pas 32 Mo, même si les paramètres permettent d'aller au-delà.

Je suis en train de configurer APC (v 3.1.9) sur une installation WordPress à fort trafic sur CentOS 6.0 64 bit.

J'ai résolu la plupart des problèmes liés à l'APC, mais il y a encore quelque chose qui ne va pas. Quels que soient les paramètres que je modifie, APC ne met jamais en cache plus de 32 Mo. J'essaie de le faire passer à 256 Mo. 32 Mo est une valeur par défaut pour apc.shm_size, je me demande donc si elle n'est pas bloquée à ce niveau.

J'ai effectué les opérations suivantes

echo '2147483648' > /proc/sys/kernel/shmmax

pour augmenter la mémoire partagée de mon système à 2G (la moitié de ma boîte 4G). Puis j'ai lancé

ipcs -lm

qui renvoie

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 2097152
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1

J'ai également apporté un changement dans

/etc/sysctl.conf

puis a couru

sysctl -p

pour que les paramètres soient conservés sur le serveur. J'ai redémarré, aussi, pour faire bonne mesure.

Dans mes paramètres d'APC, j'ai activé mmap (ce qui arrive par défaut dans les versions récentes d'APC). php.ini ressemble à ça :

apc.stat=0
apc.shm_size="256M"
apc.max_file_size="10M"
apc.mmap_file_mask="/tmp/apc.XXXXXX"
apc.ttl="7200"

Je suis conscient que le mode mmap ignorera les références à apc.shm_segments, donc je l'ai laissé de côté avec la valeur par défaut 1.

phpinfo() indique ce qui suit à propos d'APC :

Version     3.1.9
APC Debugging   Disabled
MMAP Support    Enabled
MMAP File Mask  /tmp/apc.bPS7rB
Locking type    pthread mutex Locks
Serialization Support   php
Revision    $Revision: 308812 $
Build Date  Oct 11 2011 22:55:02

Directive   Local Value 
apc.cache_by_default    On  
apc.canonicalize    O
apc.coredump_unmap  Off 
apc.enable_cli  Off 
apc.enabled On  On
apc.file_md5    Off 
apc.file_update_protection  2   
apc.filters no value    
apc.gc_ttl  3600    
apc.include_once_override   Off 
apc.lazy_classes    Off 
apc.lazy_functions  Off 
apc.max_file_size   10M 
apc.mmap_file_mask  /tmp/apc.bPS7rB 
apc.num_files_hint  1000    
apc.preload_path    no value    
apc.report_autofilter   Off 
apc.rfc1867 Off 
apc.rfc1867_freq    0   
apc.rfc1867_name    APC_UPLOAD_PROGRESS
apc.rfc1867_prefix  upload_ 
apc.rfc1867_ttl 3600    
apc.serializer  default 
apc.shm_segments    1   
apc.shm_size    256M    
apc.slam_defense    On  
apc.stat    Off 
apc.stat_ctime  Off 
apc.ttl 7200    
apc.use_request_time    On  
apc.user_entries_hint   4096    
apc.user_ttl    0   
apc.write_lock  On  

apc.php révèle le graphique suivant, quelle que soit la durée d'exécution du serveur (la taille du cache fluctue et se maintient juste en dessous de 32 Mo.

Voir l'image http://i.stack.imgur.com/2bwMa.png

Vous pouvez voir que le cache essaie d'allouer 256 Mo, mais que la partie marron du gâteau continue d'être recyclée à 32 Mo. Ceci est confirmé par le fait qu'en rafraîchissant la page apc.php, le nombre de fichiers mis en cache varie (ce qui implique que le cache ne conserve pas tous ses fichiers).

Quelqu'un a-t-il une idée de la manière dont on peut faire en sorte qu'APC utilise plus de 32 Mo pour sa taille de cache ?

**Notez que le même comportement se produit pour eaccelerator, xcache, et APC. J'ai lu ici :

http://www.litespeedtech.com/support/forum/archive/index.php/t-5072.html

que suEXEC pourrait causer ce problème.

0 votes

C'est peut-être un bug. Simplifiez les paramètres de votre php.ini APC et voyez si cela fait une différence. Par exemple, vous devez probablement spécifier uniquement apc.shm_size=256M.

0 votes

Cela fait une différence dans la mémoire disponible, mais ne dépasse jamais 32 Mo. Cela a été le cas pour eaccelerator, xcache, et APC. Est-ce que suEXEC pourrait être le coupable ici ?

0 votes

J'ai les mêmes configurations et le même problème Existe-t-il une solution ?

1voto

Sohail Ahmed Points 231

Votre problème réel est le redémarrage fréquent d'Apache qui empêche APC de construire le cache. Je ne fais pas de commentaire sur la taille de la mémoire pour wordpress. Utilisez-vous cPanel ? Il a une fonction de rotation des journaux qui, avant la rotation des journaux, redémarre Apache, bien qu'il s'agisse d'un redémarrage en douceur mais qui efface tout le cache d'APC. Vous pouvez soit augmenter le seuil de rotation des journaux, soit voir pourquoi il atteint la limite si rapidement. Vous pouvez peut-être activer la fonction Piped Log dans la configuration d'Apache (dans cPanel).

Ce lien vous indique comment faire les deux.

http://forums.cpanel.net/f5/cpanel-11-25-log-processing-145417.html

0voto

Ed Ball Points 1341

Essayez d'augmenter

apc.shm_segments    1   

puis voir ce qui se passe

0 votes

Merci pour votre réponse rapide. Le mode mmap ne permet qu'un seul segment. Les journaux d'Apache indiquent : "Avertissement PHP : PHP Startup : apc.shm_segments setting ignored in MMAP mode" lorsque l'indicateur que vous avez suggéré est activé. J'ai essayé de désactiver le mode mmap à un moment donné, et les deux segments étaient affichés dans apc.php, mais je n'ai toujours pas dépassé les 32 Mo.

0voto

MagicAndi Points 10128

APC ne met en cache que le code qui est activement utilisé - lorsqu'il dispose de beaucoup de mémoire, la seule chose qui peut retirer du code du cache est le TTL.

En augmentant le TTL, on augmente le taux d'occupation.

0 votes

Merci. J'ai ajouté apc.ttl=7200 mais le nombre de "fichiers mis en cache" continue de monter et descendre dans apc.php, ce qui m'indique qu'il n'y a plus de place et qu'il vide le cache, même s'il n'est que de 31,9 Mo. Quand il atteint cette taille de cache, il se purge. Je cherche encore des réponses. Merci pour l'aide apportée jusqu'à présent.

0 votes

Il n'y a aucune preuve qu'il manque d'espace (et beaucoup de preuves du contraire). Augmenter le TTL ne va pas prévenir pour éviter que le code n'expire - il suffit de le retarder. Le taux d'occupation devrait cependant augmenter. Vous suggérez que ce n'est pas le cas ?

0 votes

Oui, l'occupation n'augmente pas au-delà d'un certain point, puis se réinitialise toutes les 10 secondes environ. Ce poste litespeedtech.com/support/forum/archive/index.php/t-5072.html suggère que le coupable pourrait être suEXEC, que j'utilise effectivement. Est-ce une mauvaise chose ?

0voto

MrTuttle Points 1166

C'est peut-être une question sans intérêt, mais avez-vous testé cela avec autre chose que cette instance de wordpress ? Est-il possible que vous n'ayez vraiment que 32 Mo de contenu accessible ?

0 votes

Salut - merci. J'y ai pensé, mais cela explique pourquoi le nombre de fichiers mis en cache atteint un certain point juste en dessous de 32 Mo, puis laisse tomber les fichiers et reconstruit jusqu'à 32 Mo, puis recommence. Je veux vraiment résoudre ce problème et je vous remercie tous pour vos idées !

0 votes

MrTuttle - c'est une réponse-acceptation tardive, mais oui, vous avez raison. La plupart des gens recommandent ~32MB par instance de WP. J'utilise une installation multisite énorme (200 000 sites) mais une seule instance de WP elle-même. Les 32 Mo sont donc tout à fait logiques. Je voulais juste vous remercier, même si c'est un peu tard.

0 votes

@hardy101 apprécié ! De plus, il semble que vous ayez passé beaucoup de temps à faire vos devoirs, alors peut-être que votre note fera gagner du temps à l'un de nos frères dans le futur. A la vôtre !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X