Estou muito frustrado com o sistema de cache PHP APC e queria removê-lo/desativá-lo completamente do meu servidor. Estou usando PHP com Nginx instalado no Debian Squeeze, existe alguma maneira de fazer isso?
Responder1
Em vez de remover a APC, o que causará umenormedesempenho atingido e efetivamente atirar no próprio pé.
Tente isto: em /etc/php5/conf.d/apc.ini:
extension=apc.so
apc.shm_size=128M
apc.shm_segments=1
apc.max_file_size=5M
apc.num_files_hint=10000
apc.slam_defense = 0
apc.write_lock=1
Você pode aumentar apc.shm_size
para um valor maior que 128, digamos 512, se tiver RAM livre suficiente.
Eu fiz isso em um servidor que executo e nunca viNão foi possível alocar memória para o poolerros.
Responder2
Remova /opt/php5/etc/conf.d/apc.ini
ou comente todas as linhas com uma extensão ;
. Não se esqueça de reiniciar seu servidor web depois.
Verifique também '/etc//php5/apache2/php.ini' para 'extension=apc.so' para comentar.
Se você ainda tiver as fontes por perto, você pode tentar fazer isso make uninstall
depois. Não sei se o makefile contém esse alvo.
Responder3
Se você não instalou algo além do que o Squeeze oferece, um simples apt-get remove php-apc
deve resolver.
Responder4
A solução é aumentar a memória alocada para a APC.
Usar um TTL de 0 significa que a APC liberará todo o cache quando ficar sem memória. O erro não aparece mais, mas torna o APC muito menos eficiente. É uma decisão sem risco, sem problemas, do tipo “não quero fazer meu trabalho”. APC não foi feito para ser usado dessa forma. 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
Você pode aumentar a memória alocada aumentando apc.shm_size.
Se a APC for compilada para usar memória de segmento compartilhada, você estará limitado pelo seu sistema operacional. Digite este comando para ver o limite do seu sistema para cada segmento:
sysctl -a | grep -E "shmall|shmmax"
Para alocar mais memória você terá que 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 evitar que arquivos php acessados com menos frequência sejam armazenados em cache.
Mas nunca use um TTL de 0.
Use apc.php para verificar sua configuração. Você verá o que realmente está alocado e como é usado. Os gráficos devem permanecer estáveis após o expediente, se eles mudarem completamente a cada atualização, significa que sua configuração está errada (a APC está liberando tudo). Aloque 20% do que a APC realmente usa como margem de segurança e verifique 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. Hoje em dia soluções como Magento requerem mais de 10k arquivos (~60Mb em APC). Você deve permitir memória suficiente para que a maioria dos arquivos php sejam sempre armazenados em cache. Não é um desperdício, é mais eficiente manter o opcode na memória RAM do que ter o php bruto correspondente no cache do arquivo. Hoje em dia podemos encontrar servidores dedicados com 24 Gb de memória por apenas US$ 150, então não hesite em permitir vários GB para a APC. Coloquei 2 GB de 24 GB em um servidor que hospeda 5 lojas Magento e cerca de 40 sites wordpress, a APC usa 1,2 GB. Conte 64 MB para instalação do Magento, 20 MB para Wordpress com alguns plugins.