2011-05-25 00:35:23
Apache hat keine freie Semaphore
Das ist auch ein kleiner Klassiker, darum sollen dieses Problem und seine Lösung auch nicht unerwähnt bleiben. Es kann vorkommen, dass in einem Apache Error-Log die folgende Zeile auftaucht:
No space left on device (errno: 28)
Eine Prüfung ergibt dann oft, dass auf den (HD-) Devices sehr wohl noch "Space" vorhanden ist. In den Logzeilen findet sich dann auch ein Eintrag wie:
could not create private SSLMutex semaphore
Das liefert dann auch den entscheidenden Hinweis darauf, dass Apache keinen neuen Semaphor (ein klassisches Werkzeug für IPC) erzeugen kann. Die man-page zu semget() führt auch diese Fehlermöglichkeit auf:
# man semget|grep -A4 ENOSPC
ENOSPC A semaphore set has to be created but the
system limit for the maximum number of sema-
phore sets (SEMMNI), or the system wide max-
imum number of semaphores (SEMMNS), would be
exceeded.
Das sind bei vielen Hosts oft noch die zu niedrigen Standardwerte:
# cat /proc/sys/kernel/sem 250 32000 32 128
Die man-page proc(5) liefert uns folgende Infos dazu:
/proc/sys/kernel/sem (since Linux 2.4)
This file contains 4 numbers defining limits for
System V IPC semaphores. These fields are, in
order:
SEMMSL The maximum semaphores per semaphore
set.
SEMMNS A system-wide limit on the number of
semaphores in all semaphore sets.
SEMOPM The maximum number of operations that
may be specified in a semop(2) call.
SEMMNI A system-wide limit on the maximum num-
ber of semaphore identifiers.
Eine Zählung der Semaphore des Users "www" liefert das:
# ipcs -s|grep -c www 128
Jetzt stoppen wir Apache, löschen alle "vergessenen" Semaphore, setzen die Werte höher und starten Apache wieder:
# ipcs -s|grep www|cut -d\ -f2|xargs -r -n 1 ipcrm -s # echo '500 64000 32 1024' >/proc/sys/kernel/sem