WIr nutzen diese Konstellation schon recht lange, doch seit ein paar Wochen, meint ein Teil der Webserver plötzlich nur noch 500er Fehler auszuspucken. Nach einem stoppen des Lighty, killen der übrigen php-cgi Prozesse, leeren des eAccelerator Caches und starten des Lighty, lief alles wieder einwandfrei.

eAccelerator ist ein sogenannter Opcode-Cacher, er kompiliert die PHP Skripts beim ersten Aufruf und legt die Binaries in seinen Cache. Beim nächsten Aufruf muss nun nicht mehr neu kompiliert werden (wie es normalerweise üblich wäre für PHP), sondern es kann auf den Cache zurückgegriffen werden.

Zuletzt trat der Fehler erst gestern Abend auf, 6 Stunden nachdem eine Änderung des Codes erfolgte (eine Codeänderung führt auch gleichzeitig zu einem Neustart der Lightys). Nach längerer Loganalyse konnten wir diesen Fehler im error.log von lighttpd finden:

EACCELERATOR: PHP crashed on opline 10 of getNamespaceByKey() at /var/www/(…)/memcache_manager.php:431

Auf anderen Weberservern trat dieser Fehler ebenfalls zum gleichen Zeitpunkt hunderfach auf (teilweise an anderen Codestellen).  Im syslog trat gleichzeitig ein anderer Fehler auf:

php-cgi: PHP Fatal error: Call to undefined function MemcacheManager::() in /var/www/(…)/memcache_manager.php on line 375

Da wir nicht nachvollziehen können, warum dieser Fehler auftritt, gibt es nun 2 Workarounds. Das erste verhindert schlimmeres, indem alle lightys vor der Peaktime der Seite einfach durchgestartet werden (inkl. Cacheleerung).

Das zweite ist ein Cronjob, der jede Minuten das lighty-error-log parsed und nach entsprechenden Stellen in der letzten Minute sucht, trat tatsächlich ein solcher Fehler auf, wird der lighty durchgestartet und wir per Mail informiert.

Solange ich keine Antwort auf der eAccelerator Mailingliste bekomme und keine neue Version von eAccelerator erscheint, müssen wir wohl vorerst auf diese Workarounds zurückgreifen, auch wenns nicht wirklich schön ist.

Hinterlasse einen Kommentar.

Network-wide options by YD - Freelance Wordpress Developer