Je me suis parfois heurté à la limite d'allocation de mémoire d'un serveur, en particulier avec une application surchargée comme Wordpress, mais je n'ai jamais rencontré «Impossible d'allouer de la mémoire pour le pool» et j'ai du mal à retrouver les informations.
Quelqu'un sait-il ce que cela signifie? J'ai essayé d'augmenter le memory_limit
sans succès. Je n'ai pas non plus apporté de modifications importantes à l'application. Un jour, il n'y a pas eu de problème, le lendemain j'ai rencontré cette erreur.
file_mask
n'est pas l'une de ces valeurs? Si j'ai l'une de ces valeurs et que j'obtiens l'erreur, dois-je la changer pour une autre? Laquelle?L'utilisation d'un TTL de 0 signifie qu'APC videra tout le cache lorsqu'il sera à court de mémoire. L'erreur n'apparaît plus, mais cela rend APC beaucoup moins efficace. C'est une décision sans risque, sans problème, "je ne veux pas faire mon travail". APC n'est pas destiné à être utilisé de cette façon. Vous devez choisir un TTL suffisamment élevé pour que les pages les plus consultées n'expirent pas. Le mieux est de donner suffisamment de mémoire pour qu'APC n'ait pas besoin de vider le cache.
Lisez simplement le manuel pour comprendre comment ttl est utilisé: http://www.php.net/manual/en/apc.configuration.php#ini.apc.ttl
La solution consiste à augmenter la mémoire allouée à APC. Pour ce faire, augmentez apc.shm_size.
Si APC est compilé pour utiliser la mémoire de segment partagée, vous serez limité par votre système d'exploitation. Tapez cette commande pour voir la limite de votre système pour chaque segment:
Pour allouer plus de mémoire, vous devrez augmenter le nombre de segments avec le paramètre apc.shm_segments.
Si APC utilise la mémoire mmap, vous n'avez aucune limite. La quantité de mémoire est toujours définie par la même option apc.shm_size.
S'il n'y a pas assez de mémoire sur le serveur, utilisez l'option filters pour empêcher la mise en cache des fichiers php moins fréquemment utilisés.
Mais n'utilisez jamais un TTL de 0.
Comme c33s l'a dit, utilisez apc.php pour vérifier votre configuration. Copiez le fichier du package apc dans un dossier Web et pointez le navigateur vers celui-ci. Vous verrez ce qui est réellement alloué et comment il est utilisé. Les graphiques doivent rester stables après des heures, s'ils changent complètement à chaque actualisation, cela signifie que votre configuration est erronée (APC vide tout). Allouez 20% de RAM en plus que ce qu'APC utilise réellement comme marge de sécurité et vérifiez-la régulièrement.
La valeur par défaut de n'autoriser que 32 Mo est ridiculement basse. PHP a été conçu lorsque les serveurs faisaient 64 Mo et que la plupart des scripts utilisaient un fichier php par page. De nos jours, des solutions comme Magento nécessitent plus de 10k fichiers (~ 60 Mo en APC). Vous devez prévoir suffisamment de mémoire pour que la plupart des fichiers php soient toujours mis en cache. Ce n'est pas un gaspillage, il est plus efficace de conserver l'opcode en RAM plutôt que d'avoir le php brut correspondant dans le cache de fichiers. De nos jours, nous pouvons trouver des serveurs dédiés avec 24 Go de mémoire pour aussi peu que 80 $ / mois, alors n'hésitez pas à autoriser plusieurs Go à APC. J'ai mis 2 Go sur 24 Go sur un serveur hébergeant des magasins 5Magento et ~ 40 site Web wordpress, APC utilise 1,2 Go. Comptez 64 Mo pour l'installation de Magento, 40 Mo pour un Wordpress avec quelques plugins.
Aussi, si vous avez des sites de développement sur le même serveur. Excluez-les du cache.
la source
solution pour moi:
modifier début
avertissement!
@bokan m'a indiqué que je devrais ajouter un avertissement ici.
si vous avez un ttl de 0, cela signifie que chaque élément mis en cache peut être purgé immédiatement. donc si vous avez une petite taille de cache comme 2 Mo et un ttl de 0, cela rendrait l'apc inutile, car les données du cache sont toujours écrasées.
abaisser le ttl signifie seulement que le cache ne peut pas devenir plein, uniquement avec des éléments qui ne peuvent pas être remplacés.
il faut donc choisir un bon équilibre entre ttl et taille du cache.
dans mon cas, j'avais une taille de cache de 1 Go, donc c'était plus que suffisant pour moi.
modifier la fin
eu le même problème sur centos 5 avec php 5.2.17 et a remarqué que si la taille du cache est petite et que le paramètre ttl est "élevé" (comme 7200) tout en ayant beaucoup de fichiers php à mettre en cache, le cache se remplit assez rapidement et apc ne trouve rien qu'il puisse supprimer car tous les fichiers du cache tiennent toujours dans le ttl.
l'augmentation de la taille de la mémoire n'est qu'une solution partielle, vous exécutez toujours cette erreur si le cache se remplit et que tous les fichiers sont dans le ttl.
donc ma solution était de mettre le ttl à 0, donc apc remplit le cache et il y a toujours la possibilité pour apc d'effacer de la mémoire pour de nouvelles données.
J'espère que cela pourra aider
edit: voir aussi: http://pecl.php.net/bugs/bug.php?id=16966
téléchargez http://pecl.php.net/get/APC extract et exécutez l'apc.php, vous avez là un joli diagramme à quoi ressemble votre utilisation du cache
la source
L'exécution du script apc.php est la clé pour comprendre quel est votre problème, IMO. Cela nous a aidés à dimensionner correctement notre cache et, pour le moment, semble avoir résolu le problème.
la source
Pour les débutants comme moi, ces ressources ont aidé:
Recherche du fichier apc.ini pour effectuer les modifications recommandées par c33s ci-dessus et définition des quantités recommandées: http://www.untwistedvortex.com/optimizing-tuning-apc-alternate-php-cache/
Comprendre ce qu'est apc.ttl: http://www.php.net/manual/en/apc.configuration.php#ini.apc.ttl
Comprendre ce qu'est apc.shm_size: http://www.php.net/manual/en/apc.configuration.php#ini.apc.shm-size
la source
Comme Bokan l'a mentionné, vous pouvez augmenter la mémoire si disponible, et il a raison sur le fait que le réglage TTL à 0 est contre-productif.
Remarque: c'est ainsi que j'ai corrigé cette erreur pour mon problème particulier. C'est un problème générique qui peut être causé par de nombreuses choses, alors ne suivez ce qui suit que si vous obtenez l'erreur et que vous pensez que cela est dû au chargement de fichiers PHP en double dans APC.
Le problème que j'avais était lorsque j'ai publié une nouvelle version de mon application PHP. Ie remplacé tous mes fichiers .php par de nouveaux APC chargerait les deux versions dans le cache.
Parce que je n'avais pas assez de mémoire pour deux versions des fichiers php, APC manquerait de mémoire.
Il existe une option appelée apc.stat pour dire à APC de vérifier si un fichier particulier a changé et si c'est le cas de le remplacer, cela convient généralement au développement car vous apportez constamment des modifications, mais en production, il est généralement désactivé comme dans mon cas - http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat
L'activation de apc.stat résoudrait ce problème si vous êtes d'accord avec les performances.
La solution que j'ai trouvée pour mon problème est de vérifier si la version du projet a changé et, le cas échéant, de vider le cache et de recharger la page.
la source
Cela a fonctionné pour nos gars (exécutant une multitude de sites Wordpress sur le même serveur).
Modification des paramètres de mémoire dans le fichier /etc/php.d/apc.ini. Il était fixé à 64M, nous l'avons donc doublé à 128M.
apc.shm_size = 128 Mo
la source
En regardant les internets, il peut y avoir diverses causes. Dans mon cas, tout laisser par défaut sauf ...
... effacé les innombrables avertissements que je recevais plus tôt.
la source
J'ai reçu l'erreur «Impossible d'allouer de la mémoire pour le pool» après avoir déplacé une installation OpenCart vers un serveur différent. J'ai également essayé d'augmenter la limite de mémoire.
L'erreur s'est arrêtée après que j'ai changé les autorisations du fichier dans le message d'erreur pour avoir un accès en écriture par l'utilisateur sous lequel apache s'exécute (apache, www-data, etc.). Au lieu de modifier directement / etc / group (ou de chmoding les fichiers en 0777), j'ai utilisé usermod:
Ensuite, j'ai dû redémarrer apache pour que le changement prenne effet:
Ou
Ou tout ce que votre système utilise pour redémarrer apache.
Si le site est sur un hébergement mutualisé, vous devez peut-être modifier les autorisations de fichier avec un programme FTP ou contacter le fournisseur d'hébergement?
la source
Pour résoudre ce problème, définissez la valeur de apc.shm_size comme un entier Localisez votre fichier apc.ini (dans mon système, l'emplacement du fichier apc.ini /etc/php5/conf.d/apc.ini) et définissez: apc.shm_size = 1000
la source
sur mon système, j'ai dû insérer apc.shm_size = 64M dans /usr/local/etc/php.ini (FreeBSD 9.1) puis quand j'ai regardé apc.php (que j'ai copié de / usr / local / share / doc / APC /apc.php à / usr / local / www / apache24 / data) j'ai constaté que la taille du cache était passée de la valeur par défaut de 32 Mo à 64 Mo et que je n'obtenais plus un grand nombre de cache complet
références: http://au1.php.net/manual/en/apc.configuration.php lire également les commentaires de Bokan, ils ont été très utiles
la source
Surveillez la taille de vos fichiers mis en cache (vous pouvez utiliser apc.php du package apc pecl) et augmentez apc.shm_size en fonction de vos besoins.
Cela résout le problème.
la source