Apache / PHP scheint symbolische Links für 60 Sekunden zwischenzuspeichern - wie kann man sie stoppen oder herausfinden, was die Symlinks wirklich zwischenspeichert, und das stoppen?

7

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_ttlEinstellung, 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?

Shabbyrobe
quelle
Befindet sich Ihr Dokumentenstamm auf einer lokalen Festplatte, NFS oder etwas anderem?
Janne Pikkarainen
Der entsprechende fstab-Eintrag sieht folgendermaßen aus: "/ dev / centos / slash / ext3 default 1 1". Ich denke, es befindet sich auf einem lokalen Laufwerk, aber ich könnte es falsch lesen - ich weiß nicht, was / dev / centos / slash bedeutet.
Shabbyrobe
Ja, ein lokales Laufwerk. Da ist meine Theorie über den NFS-Cache.
Janne Pikkarainen
1
Wenn Sie apc haben, überprüfen Sie apc.stat = 0 in php.ini und ändern Sie es in 0, um dies zu testen, wenn nicht
Stewart Robinson
Danke für den Hinweis. Ich habe es überprüft und wir verwenden nicht die APC-Erweiterung, obwohl ich es vorziehen würde. Ich werde diese Einstellung im Auge behalten, wenn ich sie später einrichte.
Shabbyrobe

Antworten:

11

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

Ochoto
quelle
Können Sie auf etwas verlinken, das besagt, dass Apache / httpd lstat-Aufrufe bitte zwischenspeichert?
Rob Olmos
1

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

Mike
quelle
1
Kann Apache angewiesen werden, eines dieser Dinge zu tun, wenn er nicht als root / sudo ausgeführt wird? Es ist für mich keine Option, während der routinemäßigen Bereitstellung von Capistrano zu sudo.
Shabbyrobe
1
Sie müssen mit Ihrem Systemadministrator zusammenarbeiten, um eine Lösung dafür zu finden.
Sciurus
0

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 straceden ganzen Scheiß machen, um eine bessere Vorstellung davon zu bekommen, was was wann macht.

womble
quelle
1
Was macht strace genau? Ist es sicher, in der Produktion zu laufen? Dies ist ein klassisches Problem, das nur in der Produktion auftritt.
Shabbyrobe
2
Fragen gehen in Fragen, nicht in Kommentare. Aber wirklich man stracenicht schwer.
womble
1
$ 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.
Shabbyrobe
1
Installieren Sie die Klammer.
womble
2
Wenn Sie nicht über root verfügen, können Sie das Problem ohnehin nicht richtig diagnostizieren. Geben Sie dies daher an den Systemadministrator weiter. Sie benötigen jedoch kein root, um Software zu installieren.
womble
0

In meinem Fall war es nicht Apache selbst. Ich musste php-fpm neu starten.

user1383029
quelle