Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.php > #3686

OpCache (was: Klassendefinition, wo?)

From Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich)
Newsgroups de.comp.lang.php
Subject OpCache (was: Klassendefinition, wo?)
Date 2016-02-15 11:00 +0000
Message-ID <1t56c1a751i4d76n3e8%sfroehli@Froehlich.Priv.at> (permalink)
References (6 earlier) <1t56b9f8d8i496n3e8%sfroehli@Froehlich.Priv.at> <n9d2kk$olk$1@solani.org> <9t56ba3f26i54f2n3e8%sfroehli@Froehlich.Priv.at> <1t56bcce87i3ed0n3e8%sfroehli@Froehlich.Priv.at> <slrnnbu8pg.77k.hjp-usenet3@hrunkner.hjp.at>

Show all headers | View raw


On Sat, 13 Feb 2016 13:36:00 Peter J. Holzer wrote:
> > [Vorbereitend] 
> >
> > $ mkdir a
> > $ echo "<?php echo 'A'; ?>" > test.php
> > $ mkdir b 
> > $ echo "<?php echo 'B'; ?>" > test.php
> > $ ln -s a x
> >
> > [1. Aufruf von x/test.php]
> > [Ausgabe: "A"]
> >
> > $ rm x && ln -s b x
> >
> > [2. Aufruf von x/test.php]
> > [Ausgabe: "A"]
> >
> > [Apache-Reload]
> > [Ausgabe: "B"]

> > Das Beispiel ist zu stark vereinfacht, als dass es das Problem
> > triggern würde,
 
> Schade. Für das Beispiel oben würde mir nämlich eine einfache Erklärung
> einfallen, warum sich das so verhält (und auch eine Lösung für das
> Problem).

In der Tat schade; das Problem mit Caches ist häufig, dass man Dinge
nicht zuverlässig reproduzieren kann. An sich mache ich im echten Leben
genau das, aber ich habe natürlich keine Ahnung, ob Art, Anzahl und
Häufigkeit der Zugriffe einen Einfluss auf den Cache hat.

Meine Software ist idR in mehreren Versionen vorrätig, dazu auch noch
der Head vom jeweiligen Branch. In den Document Roots verweise ich per
Symlink auf die gewünschte Version, die wiederum ein Symlink auf den
aktuellen Patchlevel ist.

Also:

[vhost]
| sw -> [software]/3.2

[software]
| 3.2 -> 3.2.3
| 3.2.2
| 3.2.3
| 3.2.head

Tritt nun in einem vhost ein Fehler auf, oder wird eine (sehr
kleine) Änderung gewünscht, dann hänge ich diesen vhost von seiner
Version auf den Head um, kann die Situation mit den Live-Daten
analysieren und das Problem beheben.

[vhost]
| sw -> [software]/3.2.head

[software]
| 3.2 -> 3.2.3
| 3.2.2
| 3.2.3
| 3.2.head


Danach wird aus dem korrigierten Head ein neuer Patchlevel erzeugt,
in ein Verzeichnis ausgecheckt und der Link für die aktuelle Version
umgebogen, womit alle vhosts unmittelbar vom Bugfix profitieren:

[vhost]
| sw -> [software]/3.2

[software]
| 3.2 -> 3.2.4
| 3.2.2
| 3.2.3
| 3.2.4
| 3.2.head

Das hat sich in langen Jahren als best practice für die allermeisten
Bugs erwiesen - nur bei wenigen, größeren Problemen muss mehr
Aufwand getrieben werden.

Seit PHP7 kommen allerdings manchmal direkt nach dem Umschalten von

| 3.2 -> 3.2.3

auf 

| 3.2 -> 3.2.4

haufenweise obskure Fehlermeldungen, die erst durch einen Reload des
Webservers verschwinden. Der Zusammenhang mit dem OpCache ist mir
erst durch diesen Thread bewusst geworden (ich verwende das neue
Setup seit Jahreswechsel, so viele Korrekturen gab es da noch nicht,
und das Problem tritt auch nicht jedes Mal auf), aber jetzt wo ich
darum weiss, bin ich natürlich auf der Suche nach einer Lösung.

> ><http://codinghobo.com/opcache-and-symlink-based-deployments/>

> Hmm, die Erklärung scheint mir verkehrt herum oder zumindest
> irreführend zu sein: [...]

Das kann gut sein, ja.

> Tatsächlich gibt es allerdings (inzwischen?) zumindest die
> Optionen opcache.validate_timestamps und opcache.revalidate_freq.
> Es gibt also offensichtlich eine Überprüfung, ob ein File noch
> aktuell ist, und es erscheint mir unwahrscheinlich, dass PHP alle
> gelesenen File offen hält.

Offen gehalten wird definitiv nichts (das lässt sich mit lsof
trivial nachprüfen), aber wie der OpCache nun tatsächlich mit
versymlinkten Files umgeht, habe ich noch nicht herausgefunden.

opcache.revalidate_freq habe ich nun von 2 auf 0 gesetzt; ob das
wirklich weiterhilft, bezweifle ich, weil die Option ja gar kein
symlink-spezifisches Verhalten hat, und die Fehlermeldungen auch
nicht bloss für 2 Sekunden aufgetreten sind (damit könnte ich noch
halbwegs leben).

Es hat evt. damit zu tun, ob Dateien unter ihrem aufgerufenen Namen
oder unter dem mit realpath() ermittelten Namen gecached werden.
<http://jpauli.github.io/2014/06/30/realpath-cache.html> scheint das
erst einmal zu bestätigen, erwähnt aber im unteren Teil, dass auch
APC sich auf den realpath_cache verlässt, das Problem bei mir also
auch schon früher hätte auftreten müssen.

Servus,
   Stefan

-- 
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Superb? Superber als Stefan!? Wer glaubt, der kauft!
(Sloganizer)

Back to de.comp.lang.php | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Klassendefinition, wo? Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-02-03 21:01 +0000
  Re: Klassendefinition, wo? k@rl.pflaesterer.de (Karl Pflästerer) - 2016-02-04 07:00 +0100
    Re: Klassendefinition, wo? Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-02-07 12:44 +0000
      Re: Klassendefinition, wo? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-02-09 00:13 +0100
        Re: Klassendefinition, wo? Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-02-09 09:37 +0000
          Re: Klassendefinition, wo? "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-02-09 14:05 +0100
            Re: Klassendefinition, wo? Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-02-09 14:39 +0000
              Re: Klassendefinition, wo? "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-02-09 17:03 +0100
                Re: Klassendefinition, wo? Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-02-09 19:35 +0000
                Re: Klassendefinition, wo? Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-02-11 18:32 +0000
                Re: Klassendefinition, wo? "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2016-02-13 13:36 +0100
                OpCache (was: Klassendefinition, wo?) Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-02-15 11:00 +0000
          Re: Klassendefinition, wo? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-02-09 20:02 +0100
            Re: Klassendefinition, wo? Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-02-09 19:33 +0000
              Zitierstil (was: Klassendefinition, wo?) Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-02-09 22:25 +0100
                Re: Zitierstil (was: Klassendefinition, wo?) eulenspiegel.till@firemail.de - 2016-02-11 06:56 -0800

csiph-web