5 votes

APC corrompt la production

J'ai récemment changé mon serveur web pour Centos 6.3, avec apache 2.2.15, PHP 5.4.11 et APC 3.1.14.

J'ai commencé à recevoir de temps en temps des plaintes de clients qui me signalaient qu'une page ne fonctionnait pas ou que des erreurs étranges apparaissaient. J'ai constaté que les pages concernées comportaient des points d'interrogation et d'autres symboles étranges à des endroits aléatoires de la sortie, même si les sources sont correctes. Lorsque je change une seule lettre dans le fichier source, la page commence à fonctionner correctement.

Je soupçonne l'APC, mais je ne trouve aucun indice permettant de savoir quand et pourquoi cela se produit.

J'utilise mercurial pour pousser les changements vers la production, mais j'utilise cette approche depuis des années sans aucun problème. Peut-être que quelque chose dans la configuration est nouveau maintenant, mais malheureusement je n'ai pas gardé mon ancienne configuration.

Vous trouverez ci-dessous une capture d'écran de la dernière corruption.

screenshot from a corrupted ajax response

Edit : Voici la réponse après avoir changé un seul caractère dans la source, l'avoir sauvegardé, puis avoir annulé les fichiers (c'est la même chose si je redémarre le serveur web ou si j'efface le cache des opcodes d'APC) :

screenshot after a fix

Remarquez que les numéros de ligne ne correspondent pas, mais il s'agit à 100 % de la même demande, donc la réponse devrait être la même aussi. La ligne 111 de la première capture d'écran ne devrait pas être là du tout. Il semble qu'elle provienne d'un autre fichier source...

0voto

Jacket Points 619

J'ai changé apc.stat_ctime à 1

La vérification avec ctime permet d'éviter les problèmes causés par des programmes tels que svn ou rsync en s'assurant que les inodes n'ont pas été modifiés depuis le dernier état. APC ne vérifie normalement que mtime.

Je surveillerai de près le problème, car il se produit une ou deux fois par semaine, et je posterai ici si cela résout le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X