Ocasionalmente, eu me deparo com o limite de alocação de memória de um servidor, principalmente com um aplicativo inchado como o Wordpress, mas nunca encontrei "Não é possível alocar memória para o pool" e com problemas para rastrear qualquer informação.
Alguém sabe o que isso significa? Eu tentei aumentar o memory_limit
sem sucesso. Também não fiz alterações significativas no aplicativo. Um dia não houve problema, no dia seguinte eu acertei esse erro.
file_mask
não é um desses valores? Se eu tiver um desses valores e estiver recebendo o erro, preciso alterá-lo para outro? Qual?Usar um TTL de 0 significa que a APC liberará todo o cache quando a memória ficar sem memória. O erro não aparece mais, mas torna a APC muito menos eficiente. É uma decisão sem risco, sem problemas, "não quero fazer meu trabalho". A APC não deve ser usada dessa maneira. Você deve escolher um TTL alto o suficiente para que as páginas mais acessadas não expirem. O melhor é fornecer memória suficiente para que a APC não precise liberar o cache.
Basta ler o manual para entender como o ttl é usado: http://www.php.net/manual/en/apc.configuration.php#ini.apc.ttl
A solução é aumentar a memória alocada para a APC. Faça isso aumentando apc.shm_size.
Se a APC for compilada para usar a Memória de segmento compartilhada, você será limitado pelo seu sistema operacional. Digite este comando para ver o limite do seu sistema para cada segmento:
Para alocar mais memória, você precisará aumentar o número de segmentos com o parâmetro apc.shm_segments.
Se a APC estiver usando memória mmap, você não terá limite. A quantidade de memória ainda é definida pela mesma opção apc.shm_size.
Se não houver memória suficiente no servidor, use a opção de filtros para impedir que arquivos php acessados com menos frequência sejam armazenados em cache.
Mas nunca use um TTL de 0.
Como o c33s disse, use o apc.php para verificar sua configuração. Copie o arquivo do pacote apc para uma pasta da Web e aponte o navegador para ele. Você verá o que realmente está alocado e como é usado. Os gráficos devem permanecer estáveis após o horário de funcionamento, se forem completamente alterados a cada atualização, significa que sua configuração está incorreta (a APC está liberando tudo). Aloque 20% a mais de RAM do que a APC realmente usa como margem de segurança e verifique-a regularmente.
O padrão de permitir apenas 32 MB é ridiculamente baixo. O PHP foi projetado quando os servidores tinham 64 MB e a maioria dos scripts usava um arquivo php por página. Atualmente, soluções como o Magento exigem mais de 10k arquivos (~ 60Mb na APC). Você deve permitir memória suficiente para que a maioria dos arquivos php seja sempre armazenada em cache. Não é um desperdício, é mais eficiente manter o opcode no ram do que ter o php bruto correspondente no cache de arquivos. Atualmente, podemos encontrar servidores dedicados com 24 GB de memória por apenas US $ 80 / mês, portanto, não hesite em permitir vários GB à APC. Coloquei 2 GB de 24 GB em um servidor que hospeda as lojas 5Magento e o site ~ 40 wordpress, a APC usa 1,2 GB. Conte 64 MB para a instalação do Magento, 40 MB para um Wordpress com alguns plugins.
Além disso, se você tiver sites de desenvolvimento no mesmo servidor. Exclua-os do cache.
fonte
solução para mim:
editar início
Aviso!
@bokan me indicou que eu deveria adicionar um aviso aqui.
se você tiver um ttl de 0, isso significa que todos os itens em cache podem ser eliminados imediatamente. portanto, se você tiver um tamanho de cache pequeno como 2mb e um ttl de 0, isso tornará o apc inútil, porque os dados no cache são sempre substituídos.
abaixar o ttl significa apenas que o cache não pode ficar cheio, apenas com itens que não podem ser substituídos.
então você precisa escolher um bom equilíbrio entre ttl e tamanho do cache.
no meu caso, eu tinha um tamanho de cache de 1gb, por isso era mais do que suficiente para mim.
editar final
teve o mesmo problema no centos 5 com php 5.2.17 e percebeu que se o tamanho do cache for pequeno e o parâmetro ttl for "alto" (como 7200) enquanto tiver muitos arquivos php para armazenar em cache, o cache será preenchido rapidamente e o apc não encontra nada que possa ser removido porque todos os arquivos no cache ainda cabem no ttl.
aumentar o tamanho da memória é apenas uma solução parcial, você ainda executará esse erro se o cache for preenchido e todos os arquivos estiverem dentro do ttl.
então minha solução foi definir o ttl como 0, então o apc preenche o cache e sempre existe a possibilidade do apc limpar alguma memória para novos dados.
espero que ajude
edit: veja também: http://pecl.php.net/bugs/bug.php?id=16966
faça o download de http://pecl.php.net/get/APC extrair e execute o apc.php, você tem um bom diagrama de como é o uso do cache
fonte
A execução do script apc.php é essencial para entender qual é o seu problema, IMO. Isso nos ajudou a dimensionar nosso cache corretamente e, no momento, parece ter resolvido o problema.
fonte
Para iniciantes como eu, esses recursos ajudaram:
Localizando o arquivo apc.ini para fazer as alterações recomendadas pelos c33s acima e definindo os valores recomendados: http://www.untwistedvortex.com/optimizing-tuning-apc-alternate-php-cache/
Compreendendo o que é apc.ttl: http://www.php.net/manual/en/apc.configuration.php#ini.apc.ttl
Compreendendo o que é apc.shm_size: http://www.php.net/manual/en/apc.configuration.php#ini.apc.shm-size
fonte
Como Bokan mencionou, você pode aumentar a memória, se disponível, e ele está certo quanto à definição contraproducente de TTL para 0.
Nota: Foi assim que corrigi este erro para o meu problema específico. É um problema genérico que pode ser causado por várias coisas; portanto, siga apenas o abaixo se você receber o erro e achar que isso foi causado pelo carregamento de arquivos PHP duplicados no APC.
O problema que eu estava tendo era quando lancei uma nova versão do meu aplicativo PHP. Ou seja, substituiu todos os meus arquivos .php por novos. A APC carregaria ambas as versões no cache.
Como eu não tinha memória suficiente para duas versões dos arquivos php, a APC fica sem memória.
Existe uma opção chamada apc.stat para informar à APC para verificar se um arquivo específico foi alterado e, se for o caso, substituí-lo. Isso normalmente é bom para o desenvolvimento, porque você está constantemente fazendo alterações, no entanto, na produção, geralmente é desativado como no meu case - http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat
Ativar o apc.stat resolveria esse problema se você concordasse com o desempenho.
A solução que eu encontrei para o meu problema é verificar se a versão do projeto foi alterada e, se houver, esvaziar o cache e recarregar a página.
fonte
Isso funcionou para os nossos funcionários (executando vários sites do Wordpress no mesmo servidor).
Alteradas as configurações de memória no arquivo /etc/php.d/apc.ini. Como foi definido para 64M, dobramos para 128M.
apc.shm_size = 128M
fonte
Olhando para as internets, pode haver várias causas. No meu caso, deixando tudo padrão, exceto ...
... cancelou os incontáveis avisos que eu estava recebendo antes.
fonte
Recebi o erro "Não é possível alocar memória para o pool" depois de mover uma instalação do OpenCart para um servidor diferente. Eu também tentei aumentar o memory_limit.
O erro parou depois que alterei as permissões do arquivo na mensagem de erro para ter acesso de gravação pelo usuário que o apache executa como (apache, www-data, etc.). Em vez de modificar o arquivo / etc / group diretamente (ou alterar os arquivos para 0777), usei o usermod:
Então eu tive que reiniciar o apache para que a alteração tivesse efeito:
Ou
Ou o que seu sistema usa para reiniciar o apache.
Se o site estiver em hospedagem compartilhada, talvez você precise alterar as permissões de arquivo com um programa FTP ou entre em contato com o provedor de hospedagem?
fonte
Para resolver esse problema, defina o valor para apc.shm_size como número inteiro Localize o arquivo apc.ini (no meu sistema, local do arquivo apc.ini /etc/php5/conf.d/apc.ini) e defina: apc.shm_size = 1000
fonte
no meu sistema, tive que inserir apc.shm_size = 64M no /usr/local/etc/php.ini (FreeBSD 9.1) e depois quando olhei para o apc.php (que copiei de / usr / local / share / doc / APC /apc.php para / usr / local / www / apache24 / data) descobri que o tamanho do cache havia aumentado do padrão de 32M para 64M e não estava mais recebendo uma contagem total de cache grande
referências: http://au1.php.net/manual/en/apc.configuration.php também leram os comentários de Bokan, foram muito úteis
fonte
Monitore o tamanho dos arquivos em cache (você pode usar o apc.php do pacote apc pecl) e aumente o apc.shm_size de acordo com suas necessidades.
Isso resolve o problema.
fonte