4 votes

Apache ne remarque pas immédiatement un changement dans le document root

Nous utilisons capistrano pour les déploiements de sites web et notre document root Apache est un lien symbolique vers une version de code particulière. La procédure de déploiement bascule le lien symbolique de l'ancienne version vers la nouvelle version en tant que dernière étape du déploiement.

Nous migrons nos serveurs web de vrai serveurs exécutant RHEL 5.6 à des machines virtuelles Amazon EC2 exécutant Ubuntu 11.10 et les nouveaux serveurs rencontrent un problème où Apache ne remarque pas immédiatement le changement de son document root lorsque le lien symbolique est basculé. Cela peut prendre une seconde ou deux (et je crois même avoir vu que cela prenait quelques minutes). C'est un peu comme si Apache avait mis en cache le chemin physique du lien symbolique pendant un certain temps.

Est-ce que quelqu'un connaît des paramètres Apache auxquels je pourrais jeter un œil pour le pousser à "scanner" les changements de fichiers servis plus rapidement?

Pensées:

  • J'ai lu que les disques sur les machines virtuelles sont beaucoup plus lents (car ils sont stockés sur un réseau). Peut-être que le cache du système de fichiers fonctionne différemment aussi? Si c'est le cas, y a-t-il quelque chose à faire?
  • Le site web exécute du code PHP. Peut-être y a-t-il des différences de configuration PHP entre RHEL et Ubuntu? J'ai vérifié realpath_cache_ttl mais les deux serveurs ont des commentaires à ce sujet:

par exemple

; Durée, en secondes, pendant laquelle les informations realpath doivent être mises en cache pour un fichier ou un répertoire donné. Pour les systèmes avec des fichiers peu modifiés, envisagez d'augmenter cette valeur.
; http://www.php.net/manual/en/ini.core.php#ini.realpath-cache-ttl
;realpath_cache_ttl = 120
  • Nous utilisons la mémoire cache d'opcode APC mais ne pensons pas que ce soit le problème en raison de l'expérimentation. Le code PHP se trouve dans des chemins de fichiers différents pour chaque déploiement et nous assurons stat=1.
  • Voici une question similaire qui est très intéressante: 294107 - mais ne fournit pas de réponse pour moi.
  • Une solution serait de recharger Apache à chaque fois que nous modifions le lien symbolique du document root. Je le ferai si nous ne trouvons pas d'autre solution.

2voto

rmistero Points 1

Si c'est une image sauvegardée par EBS, notez qu'Amazon utilise des mises en cache assez agressives en arrière-plan (c'est-à-dire que vos paramètres ne signifient rien) pour obtenir des performances EBS vaguement comparables pour les tâches de lecture courantes. Les écritures sont plus lentes à être écrites sur le disque.

J'ai eu un certain succès avec && sync. Il est donc possible qu'Amazon piége la commande système sync et force EBS à se synchroniser également. Ou peut-être est-ce le comportement naturel de la synchronisation accélérant le processus (c'est-à-dire que le fait de pousser immédiatement les modifications en mémoire vers le système de fichiers déclenche également EBS). Malheureusement, Amazon n'est pas particulièrement explicite concernant leur technologie EBS.

Si le problème réside vraiment avec Apache, vous ne spécifiez pas si vous faites quelque chose pour alerter Apache pour qu'il fasse attention... un "apachectl -k graceful" indiquera à chaque fil de travail de terminer ce qu'il fait et de sortir, puis de lancer un nouveau fil pour le remplacer, en théorie un qui ne possède pas le contenu en cache. (Je doute que la destination du lien symbolique soit mise en cache par Apache, elle pourrait être mise en cache dans la table des descripteurs de fichiers pour le processus ; sync devrait résoudre cela.)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X