Problem:

Gerade bei einem Update eines halbwegs aktuellen openSUSE-Systems aufgetreten:
Apache startet nicht mehr und im error_log 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 /proc/sys/kernel/shmmax 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 67108864 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 -p dient dazu die Werte aus der sysctl.conf neu einzulesen. Dies macht nur Sinn, wenn man die oben genannte echo-Anweisung übersprungen hat.

Kategorien:

Stichwörter:

sysctl · suse · opensuse · shm · shmmax · eaccelerator · apache · php · linux ·