Nachdem bei einem Linux-Webserver kürzlich Updates u.a. für PHP5 installiert wurden, ließ sich Apache anschließend nicht mehr starten. Im
error.log war dazu folgendes zu finden:
PHP Warning: [eAccelerator] This build of "eAccelerator" was compiled for PHP version 5.2.6-1+lenny4. Rebuild it for your PHP version (5.2.6-1+lenny6) or download precompiled binaries.\n in Unknown on line 0
PHP Fatal error: Unable to start eAccelerator module in Unknown on line 0
Das ist an sich normal, da auf diesem Server eAccelerator im Einsatz ist und dieser für jede PHP-Version individuell kompiliert werden muss. Da es zudem eine neue Version von eAccelerator gab, wurde diese beim Neukompilieren verwendet.
Nachdem dies erfolgreich abgeschlossen war, ließ sich Apache jedoch noch immer nicht starten. Doch diesmal war die Fehlermeldung eine andere:
eAccelerator: Could not allocate 67108864 bytes, the maximum size the kernel allows is 33554432 bytes. Lower the amount of memory request or increase the limit in /proc/sys/kernel/shmmax.
PHP Warning: [eAccelerator] Can not create shared memory area in Unknown on line 0
PHP Fatal error: Unable to start eAccelerator module in Unknown on line 0
Diese Fehlermeldung besagt, dass das eAccelerator-Module versucht, 64MB Shared Memory zu reservieren, der Kernel aber nur 32MB zulässt. Somit schlägt dann auch der Start des Apache fehl.
Zur Lösung des Problems hat gibt es dann zwei Möglichkeiten: Die einfachste ist, in der
php.ini den Wert
eaccelerator.shm_size auf max. 32MB zu setzen. Doch genau genommen umgeht man das Problem damit nur.
Deshalb kann man auch dem in der Fehlermeldung angegebenen Hinweis folgen und den Maximalwert für den Shared Memory erhöhen. Dies geht beispielsweise für 64MB (= 67108864 Bytes) wie folgt:
echo "67108864" > /proc/sys/kernel/shmmax
Dies eignet sich jedoch nur für Testzwecke, da diese Einstellung nach dem nächsten Neustart nicht mehr vorhanden ist. Deshalb sollte man die Einstellung stattdessen folgendermaßen fest im System eintragen:
# Festlegen der Einstellung
echo "kernel.shmmax=67108864" >> /etc/sysctl.conf
# Einlesen der sysctl.conf
sysctl -p
Mit dieser Einstellung kann man eAccelerator nun bis zu 64MB Shared Memory zur Verfügung stellen.
Genau danach hab ich gesucht!
lg