Ja, ich habe an meinem Server herumgespielt, ich gebe es zu! Es begann so relativ einfach mit einem 2GB großen ErrorLog und der Fehlermeldung
PHP Fatal error: PHP Startup: apc_mmap: mmap failed: in Unknown on line 0
Die Lösung dieses Problems war recht schnell gefunden, man solle die Datei /etc/php5/conf.d/apc.ini
anpassen und mit folgendem Inhalt füllen:
extension=apc.so apc.enabled = 1 apc.shm_size = 48M apc.include_once_override = 1 apc.mmap_file_mask = /tmp/apc.XXXXXX
Stimmt, auf den ersten Blick ist das alles korrekt, die Fehler waren sofort weg…dafür ploppten plötzlich kleine Instant-Messenger Fensterchen auf meinem Bildschirm auf: „Das Forum geht nicht mehr.“, „Das WordPress Backend lässt sich nicht mehr aufrufen“, „Ich sehe nur noch eine weiße Seite“.
Ja KRUZIFIX, was ist denn das nun wieder? Es häufen sich Fehlermeldungen der Kategorie
PHP Fatal error: Call to undefined function wp_dashboard_setup()
oder Fatal error: Call to undefined function wp_reset_vars()
Ich dachte APC sei die eierlegende Wollmilchsau unter den ByteCaches, das beste seit geschnitten Brot! AM ARSCH. Oder ich bin zu blöd das korrekt zu konfigurieren? Die Option besteht auch noch. Also auf zum Lösungsversuch!
Natürlich verschwindet das Problem sofort, wenn man APC mittels apc.enabled=0
wieder ausschaltet. Aber das ist keine Lösung. Natürlich kann man auch die betreffenden Dateien einfach von der APC Filterung mittels apc.filters = "wp-cache-config*","index.php"
ausschließen. Doch erstens ist das nur ein Behandeln von Syptomen und ich bin mir sicher, dass dies auch wieder irgendwelche Seiteneffekte haben wird, wenn ganz plötzlich einige Skripte serverweit nicht mehr gefiltert werden.
Gehen wir mal Stück für Stück durch. Was macht aber eigentlich die Option apc.include_once_override
? In der PHP Dokumentation steht „Optimize include_once and require_once calls and avoid the expensive system calls used.“ Könnte gut klingen und würde auch Sinn machen, wenn nicht gleichzeitig im PHP Bugtracker dokumentiert wäre, dass apc.include_once_override
bekannte Kompatibilitätsprobleme hätte und als „won’t fix“ markiert ist. Wieder was gelernt: Kopiere niemals blindlings irgendwelche Konfigurationen von Webseiten, wenn du dich nicht vorher genau informiert hast was die Optionen eigentlich bewirken 😉 Somit sieht die APC Konfiguration jetzt so aus und die Fehler sind weg!
extension=apc.so apc.enabled = 1 apc.shm_size = 48M apc.include_once_override = 0 apc.mmap_file_mask = /tmp/apc.XXXXXX