Wir haben eine PHP-Webanwendung, die wir mit Capistrano auf einem LAMP-Server unter CentOS 5.5 bereitstellen. Capistrano verwaltet die Umstellung auf die neueste Version (und das Zurücksetzen) mithilfe eines Symlinks. Daher muss unser Dokumentenstamm auf diesen Symlink verweisen.
Leider haben wir festgestellt, dass Webanfragen an die PHP-Anwendung nach der Aktualisierung des Symlinks immer noch genau 60 Sekunden lang auf das vorherige Ziel des Symlinks des Dokumentstamms verweisen.
Die einzige Einstellung in der PHP-Konfiguration, die sich möglicherweise darauf bezieht, ist die realpath_cache_ttl
Einstellung, die jedoch auf 120 Sekunden festgelegt ist. Ich konnte nichts in der Konfiguration von Apache finden.
Wir verwenden APC nicht.
Suche ich überhaupt an der richtigen Stelle?
quelle
Antworten:
Symlinks werden von Apache zwischengespeichert. Ich gehe davon aus, dass Sie FollowSymLinks in Ihrer httpd.conf verwenden. Sie können versuchen, SymLinksIfOwnerMatch zu verwenden, dessen Aufruf von lstat nicht zwischengespeichert ist. Http://httpd.apache.org/docs/2.0/misc/perf-tuning.html#symlinks
quelle
Apache speichert keine Symlinks zwischen, aber es speichert die Speicherorte von Dateien ein wenig, und wenn Sie APC verwenden, wird es wirklich etwas zwischengespeichert. Ich habe das auch gesehen, aber Stoff für Bereitstellungen verwendet. Die Problemumgehung bestand darin, nach dem Änderungssymlink einen Apache-Neustart / Neuladen / Graceful durchzuführen.
Versuchen Sie zuerst einen ordnungsgemäßen Versuch, laden Sie ihn dann neu und starten Sie ihn neu, wenn alles andere fehlschlägt
quelle
Apache speichert keine Symlinks zwischen (es wäre unglaublich dumm, es zu versuchen; der Dateisystem-Cache weiß viel mehr über die Vorgänge und wäre fast so schnell). Ich würde
strace
den ganzen Scheiß machen, um eine bessere Vorstellung davon zu bekommen, was was wann macht.quelle
man strace
nicht schwer.$ man strace No manual entry for strace
. Es ist auf meinen Produktionssystemen nicht verfügbar. Anfragen zur Ausarbeitung Ihrer Lösung finden Sie in den Kommentaren.In meinem Fall war es nicht Apache selbst. Ich musste php-fpm neu starten.
quelle