Pergunta

Nós habilitado recentemente APC em nossos servidores, e, ocasionalmente, quando publicamos novo código ou altera descobrimos que os arquivos de origem que foram alterados erros começar a jogar que não são refletidas no código, os erros normalmente de análise que descreve um token que não existe. Verificamos isso executando php -l nos arquivos os logs de erros dizem são afetados. Normalmente, uma republicar corrige o problema. Estamos usando PHP 5.2.0 e 3.01.9 APC. A minha pergunta é, tem mais alguém experimentou este problema, ou alguém reconhecer o que o nosso problema é? Se sim, como você consertá-lo ou como poderíamos consertá-lo?

Edit: Eu provavelmente deve adicionar em alguns detalhes sobre o nosso processo de publicação. O conteúdo está sendo empurrado para os servidores de produção via rsync a partir de um servidor de teste. Nós habilitado apc.stat_ctime porque ele disse isso ajuda as coisas correr mais suave com o rsync. apc.write_lock é ativado por padrão e não ter desativado-lo. O mesmo vale para apc.file_update_protection.

Foi útil?

Solução

soa como um arquivo publicado partes está sendo lido e em cache como quebrado. apc.file_update_protection é projetado para ajuda parar com isso.

em php.ini: apc.file_update_protection integer

configuração apc.file_update_protection puts um atraso na marca caching nova arquivos. O padrão é de 2 segundos, o que significa que, se a modificação timestamp (mtime) em um processo que é menos de 2 segundos de idade, quando ele é acessado, não serão armazenados em cache. O infeliz que acessar esse arquivo incompleto ainda verá estranheza, mas pelo menos ele não vai persistir.

A seguir a questão que está sendo editado: Uma razão que eu não vejo esses tipos de problemas é que eu empurro uma nova cópia inteira do site (com SVN exportação). Só depois disso é totalmente concluída é que se torna visível a Apache / mod_php (ver minha resposta Como começar a implementação de aplicações PHP de um repositório Subversion? )

A outra coisa que pode acontecer é claro, é que se você está atualizando no lugar, você pode estar atualizando arquivos que dependem de outras que ainda não foram enviados. Rsync só pode garantir atualizações atômicas para arquivos individuais, e não toda a coleção que está sendo alterado / enviados. Outra razão pela qual eu acho que para fazer o upload do site en-massa, e só então colocado em uso.

Outras dicas

Parece que a APC não é pré-formação ou recebendo o correto arquivo de informações estatísticas. Você pode verificá-lo para certificar-se da APC configuração apc. Stat está configurado corretamente. Outra coisa que você poderia fazê-lo forçar o cache para limpar com apc_clear_cache ( ) quando você publicar novo código.

Nunca vi isso antes, mesmo se eu sou um grande utilizador da APC. Talvez tentar desencadear um script que esvaziar a toda APC opcode você envia novo código no servidor?

Quando você começa um arquivo com um erro de análise, voltar-se, em seguida, repubish. Tome esse mesmo arquivo que trabalha agora e fazer um diff contra o arquivo com o erro de análise.

ctime significa tempo de criação. Você vai querer limpar manualmente todo o cache cada vez que você fazer as atualizações.

Você pode facilmente fazer isso, colocando a algum lugar roteiro apc.php no seu servidor. Este script dá-lhe armazenar em cache estatísticas, e permitirá que você deixar cair o cache completamente.

O script vem com APC.

Hopet sua ajuda, Evert

Esta é provavelmente a acontecer, porque há uma incompatibilidade entre o código e as versões em cache do código.

Por exemplo, a APC tem uma versão em cache do user.php, mas fez alterações a user.php ou para os dados que usa usuário. A versão em cache ainda está em execução, mesmo após a sua implantação, porque ainda não expirou.

Se você limpar suas entradas de cache APC quando você implanta, este problema deve desaparecer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top