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