Problem:
Gerade bei einem Update eines halbwegs aktuellen openSUSE-Systems aufgetreten:
Apache startet nicht mehr und im <code>error_logcode> steht:
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
Dieser Bug betrifft nicht nur SuSE-Systeme sondern nach meinen Nachforschungen auch weitere Linux-Distributionen.
Lösung:
Wie bereits in der Fehlermeldung angegeben reicht der Wert in <code>/proc/sys/kernel/shmmaxcode> nicht um ausreichend SHM-Speicher (ein Shared-Memory-Bereich) zu beanspruchen. Abhilfe schafft hier Spontan folgender Weg:
echo "67108864" > /proc/sys/kernel/shmmax
(Der Wert <code>67108864code> ist der o.g. Fehlermeldung entnommen.)
Nun lässt sich Apache i.d.R. starten.
Nach einem Reboot ist dieser Wert aber wieder verloren. Daher muss er im System fest angemeldet werden:
sysctl -w kernel.shmmax=67108864 #und die neue /etc/sysctl.conf einlesen: sysctl -p
Letzterer Befehl mit dem Parameter <code>-pcode> dient dazu die Werte aus der <code>sysctl.confcode> neu einzulesen. Dies macht nur Sinn, wenn man die oben genannte <code>echocode>-Anweisung übersprungen hat.