Preciso limpar todas as entradas de cache da APC ao implantar uma nova versão do site. O APC.php possui um botão para limpar todos os caches de código de operação, mas não vejo botões para limpar todas as entradas do usuário, todas as entradas do sistema ou todas as entradas por diretório.
É possível limpar todas as entradas de cache por meio da linha de comando ou de alguma outra maneira?
php
performance
caching
apc
lo_fye
fonte
fonte
Respostas:
Você pode usar a função PHP
apc_clear_cache
.A chamada
apc_clear_cache()
limpará o cache do sistema e a chamadaapc_clear_cache('user')
limpará o cache do usuário.fonte
php -r "apc_clear_cache();"
Não acredito que nenhuma dessas respostas realmente funcione para limpar o cache da APC da linha de comando. Como Frank Farmer comentou acima, a CLI é executada em um processo separado do Apache.
Minha solução para limpar a partir da linha de comando foi escrever um script que copie um script de limpeza da APC para o
web
diretório, acesse-o e exclua-o. O script está restrito a ser acessado a partir do host local.apc_clear.php
Este é o arquivo que o script copia para o diretório da web, acessa e exclui.
Script de limpeza de cache
Este script copia apc_clear.php para o diretório da web, acessa-o e exclui-o. Isso é baseado em uma tarefa do Symfony. Na versão Symfony, as chamadas são feitas para a forma Symfony de copiar e desvincular, que lida com erros. Você pode querer adicionar verificações para que tenham sucesso.
fonte
Eu sei que não é para todos, mas: por que não fazer um reinício gracioso do Apache?
Por exemplo, no caso do Centos / RedHat Linux:
Ubuntu:
fonte
Isso não está indicado na documentação, mas para limpar o cache do opcode, você deve fazer:
EDIT: Isso parece se aplicar apenas a algumas versões mais antigas do APC.
Não importa qual versão você está usando, você não pode limpar o cache da APC mod_php ou fastcgi de um script php cli, pois o script cli será executado a partir de um processo diferente como mod_php ou fastcgi. Você deve chamar apc_clear_cache () de dentro do processo (ou processo filho) para o qual deseja limpar o cache. Usar curl para executar um script php simples é uma dessas abordagens.
fonte
Se você deseja limpar o cache do apc no comando: (use sudo, se necessário)
APCu
APC
fonte
Se você estiver executando em uma pilha NGINX / PHP-FPM, sua melhor aposta é provavelmente apenas recarregar o php-fpm
service php-fpm reload
(ou qualquer que seja o seu comando de recarga no seu sistema)fonte
Conforme definido no documento da APC:
Para limpar o cache, execute:
fonte
Outra possibilidade para o uso da linha de comando, ainda não mencionada, é usar curl.
Isso não resolve o problema de todas as entradas de cache se você estiver usando o script stock apc.php, mas poderia chamar um script adaptado ou outro que você colocou no lugar.
Isso limpa o cache do opcode:
Altere o parâmetro OB para 3 para limpar o cache do usuário:
Coloque as duas linhas em um script e chame-o com $ PASSWORD em seu ambiente.
fonte
Se você deseja monitorar os resultados via json, pode usar este tipo de script:
Conforme mencionado em outras respostas, esse script precisará ser chamado via http ou curl e você precisará ser protegido se for exposto na raiz da web do seu aplicativo. (por ip, token ...)
fonte
apc_clear_cache () funciona apenas no mesmo php SAPI que você deseja que o cache seja limpo. Se você possui PHP-FPM e deseja limpar o cache do apc, faça-o através de um dos scripts php, NÃO da linha de comando, porque os dois caches são separados.
Eu escrevi CacheTool , uma ferramenta de linha de comando que resolve exatamente esse problema e com um comando você pode limpar o cache do PHP-FPM APC na linha de comando (ele se conecta ao php-fpm para você e executa as funções do apc)
Também funciona para o opcache.
Veja como funciona aqui: http://gordalina.github.io/cachetool/
fonte
O estábulo da APC está tendo a opção de limpar um cache em sua própria interface. Para limpar essas entradas, você deve fazer login na interface do apc.
A APC está tendo a opção de definir nome de usuário e senha no arquivo apc.php.
fonte
php-apc
pacote instalado no seu sistema.se você executar o fpm no ubuntu, precisará executar o código abaixo (verificado em 12 e 14)
fonte
apc.ini
apc.stat = "1" forçará a APC a stat (verificar) o script em cada solicitação para determinar se ele foi modificado. Se foi modificado, ele irá recompilar e armazenar em cache a nova versão.
Se essa configuração estiver desativada, a APC não irá verificar, o que geralmente significa que, para forçar a APC a verificar novamente os arquivos, o servidor da Web precisará ser reiniciado ou o cache deverá ser limpo manualmente. Observe que as configurações do servidor da Web FastCGI podem não limpar o cache na reinicialização. Em um servidor de produção em que os arquivos de script raramente mudam, um aumento significativo no desempenho pode ser alcançado pelas estatísticas desabilitadas.
fonte
A nova interface de administração da APC tem opções para adicionar / limpar o cache do usuário e o código do opcode. Uma funcionalidade interessante é adicionar / atualizar / excluir os diretórios do cache do opCode
Documentação de administrador da APC
fonte
Uma boa solução para mim foi simplesmente não usar mais o cache desatualizado do usuário após a implantação.
Se você adicionar prefixo a cada uma das chaves, poderá alterar o prefixo ao alterar a estrutura de dados das entradas de cache. Isso ajudará você a obter o seguinte comportamento na implantação:
Isso é possível apenas para o cache do usuário.
fonte
Criar arquivo APC.php
Execute-o no seu navegador.
fonte
Minha solução alternativa para a construção do Symfony com várias instâncias no mesmo servidor:
Etapa 1. Crie um gatilho ou algo para definir um sinalizador de arquivo (por exemplo, comando Symfony) e depois crie
marker file
..Etapa 2. No arquivo de índice no início, adicione o código de limpeza e remova
marker file
.Etapa 2. Execute o aplicativo.
fonte
Tivemos um problema com a APC e os links simbólicos para links simbólicos para arquivos - parece ignorar as alterações nos próprios arquivos. De alguma forma, executar o toque no arquivo em si ajudou. Não sei dizer qual é a diferença entre modificar um arquivo e tocá-lo, mas de alguma forma era necessário ...
fonte